2014-07-09 54 views
2

Я пытаюсь выяснить, когда самое лучшее время для использования функций-членов (статические), и когда нужно добавить только вспомогательный метод в файл .cpp.Когда функция должна быть функцией-членом

Предполагая, что в классе MyClass я хочу преобразовать TypeA в typeB. Это длинный процесс, поэтому я добавлю метод обработки преобразования.

Метод является чисто функциональным и не имеет ничего общего с состоянием экземпляра MyClass. Он получает входные данные и производит выходные данные без использования каких-либо членов (частных или общедоступных) MyClass.

Только MyClass будет использовать этот метод.

Теперь я не знаю, как этот метод должен быть определен:

  1. статическая функция MyClass
  2. статическая функция в специальном классе с этой функцией.
  3. Метод справки, который не является членом какого-либо класса, только определение в файле cpp.
+0

Если это концептуально связано с 'MyClass', то оно должно быть сделано в виде private static и введено в пространство имен MyClass. – StoryTeller

+0

По возможности и использование этой функции ограничено 'MyClass', я бы выбрал 3. (в неназванном пространстве имен). –

+0

Небольшая функция «полезности» вроде этого, я делаю # 3 (также в неназванном пространстве имен), возможно, чтобы избежать перекомпиляции, если использовать в качестве статической функции в файле заголовка. Но это не имеет большого значения между 1 и 3. –

ответ

3

метод 3.Help, который не является членом какого-либо класса, только определение в файле cpp.

Таким образом, вы можете изменить определение вспомогательного метода, если вам нужно, не заботясь о перекомпиляции клиентов действует MyClass «s в случае принятия его статической функции члена.

EDIT: Как @ πάνταῥεῖ сказал, вы могли бы поставить вспомогательный метод в безымянном пространстве имен, чтобы ограничить его использование в файле MyClass CPP (и единицы перевода, включая его).

+1

Неименованное пространство имен должно избегать конфликтов имен между файлами. Он не ограничивает использование только одним классом. –

+0

@NeilKirk Да, если включить файл cpp. Этот трюк частично зависит от программных соглашений. – songyuanyao

+0

Я этого не понимаю. –

3

Если, как вы говорите, «Только MyClass собираемся использовать этот метод», то она логически принадлежит MyClass как статическая функция члена.

+1

Или как локальная функция в единственном исходном файле, она используется. –

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