Где объявлять вспомогательные функции?

294
28 октября 2017, 17:15

К примеру, у меня есть класс, который делает WMI запросы, там часто надо преобразовывать QString к BSTR, поэтому я хочу написать функции преобразования. Где мне их лучше объявлять, в этом же классе, если да, то private или public? Создать namespace с двумя функциями только для этого класса? Создать общий namespace для всех функций преобразования, и, пока что, записать туда только две эти функции? Объявить их глобально в хедере этого класса?

Answer 1

Как пишет Скотт Мейерс в своей книге «Эффективное использование C++»:

Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса. Это повышает степень инкапсуляции и расширяемость, а также гибкость упаковки функциональности.

Если хотите ознакомиться с этим правилом детальнее - см. стр. 105 вышеупомянутой книги.

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

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

READ ALSO
Вывод символов с нижним регистром и верхним регистром

Вывод символов с нижним регистром и верхним регистром

Стоит задача, водится строка, при выводе должно быть две строки, одна выводит символы только верхнего регистра, вторая только нижнегоНачал...

561
Почему typeid печатает неверный тип?

Почему typeid печатает неверный тип?

Изучаю вывод типов в С++, и использую метод name() класса std::type_info, для печати типа, который имеет переменная:

296
Смена компилятора в CLion

Смена компилятора в CLion

Установил g++ через brew install gcc путь до него /usr/local/bin/g++-7, но CLion использует этот /Applications/Xcodeapp/Contents/Developer/Toolchains/XcodeDefault

287
Как извлечь стили из Word на C++

Как извлечь стили из Word на C++

Пишу программу для автоматической проверки форматирования в WordСтало ясно что для извлечения стилей нужно парсить XML

296