2009-08-26 4 views
5

Что подходит:определение кучи статических методов в C++

class xyz { 
    static int xyzOp1() { } 
    static int xyzOp2() { } 
}; 

ИЛИ

namespace xyz { 
    static int xyzOp1() {} 
    static int xyzOp2() {} 
}; 

Есть ли что-то конкретное, которое мы можем получить, когда мы определяем с помощью класса тега в Comparision с пространством имен тега?

Также есть ли какие-либо различия в управлении памятью, которые нам нужно беспокоиться?

ответ

5

Не видя тела этих функций, я бы сказал, что пространства имен более уместны. В пространствах имен вы можете иметь операторы using, так что вам не нужно полностью квалифицировать имена функций при их вызове.

Единственный случай использования классов - это когда статические методы имеют какое-либо отношение к объектам класса, например. когда им необходимо получить доступ к частным членам экземпляров. Из вашего описания кажется, что вы не будете создавать какие-либо экземпляры xyz, поэтому вы не должны использовать классы здесь.

С точки зрения управления памятью нет разницы между этими подходами.

+0

Thanks, Я писал несколько вспомогательных подпрограмм, чтобы получить системную информацию от разбора/proc fs, эти вспомогательные процедуры на самом деле не требуют ассоциации с классом, в моем требовании имеет смысл использовать пространство имен. Все могло измениться, если бы я хотел скрыть некоторые из этих вспомогательных подпрограмм, которые другие вспомогательные процедуры вызывают, но не подвергаются, в таком сценарии я мог бы предпочесть подход класса. – harishvk27

8

Это разные вещи. В контексте class, static означает, что для методов не требуется объект для работы, поэтому они больше похожи на бесплатные функции. В контексте namespace это означает, что функции имеют внутреннюю связь, поэтому они уникальны для единицы перевода, в которой они определены.

Кроме того, члены class являются частными по умолчанию, поэтому, как указано, ваши функции класса являются только вызываемыми друг от друга. Вам нужно будет добавить спецификатор доступа public: или сделать class a struct, чтобы изменить это.

Если вам нужна куча бесплатных функций и не нужны объекты класса, то, вероятно, более удобно определять их как функции static в пространстве имен. Если они определены в строке в файле заголовка, тогда они обычно должны быть объявлены inline. Это подразумевается, если они определены в class.

1

Основным фактором при выборе способа использования будет то, что сами ваши функции могут работать в частном состоянии или использовать частные методы, и в этом случае статический класс определенно является лучшим вариантом.

Есть еще несколько нюансов, но в конечном итоге статический класс предоставит вам больше контроля в вашей инкапсуляции.

Смежные вопросы