определение набора статических методов в c ++ - PullRequest
5 голосов
/ 26 августа 2009

Что подходит:

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

OR

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

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

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

Ответы [ 3 ]

8 голосов
/ 26 августа 2009

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

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

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

5 голосов
/ 26 августа 2009

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

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

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

1 голос
/ 26 августа 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...