C ++ non-publi c вспомогательные классы и встроенный код - PullRequest
0 голосов
/ 08 мая 2020

У меня есть код C ++ с множеством небольших вспомогательных классов, которые не являются частью интерфейса publi c, а также некоторые более крупные классы. Я «скрываю» вспомогательные классы, объявляя их в заголовочном файле и помещая их объявление в исходный файл. Это хорошая и распространенная практика или есть более эффективные способы скрыть вспомогательные классы?

Еще одна сложность заключается в том, что большие классы publi c имеют функции получения / установки, которые я бы хотел встроить, поэтому их код должен быть go в файле заголовка. Однако этот код явно использует вспомогательные классы, поэтому мне также придется определять их в файле заголовка. Но тогда они будут частью интерфейса publi c. Есть ли способ заставить инкапсуляцию работать в такой ситуации?

1 Ответ

2 голосов
/ 08 мая 2020

и поместив их объявление в исходный файл.

Вы имеете в виду их определение. Вы уже поместили объявление в заголовок.

Это хорошая и обычная практика

Определение классов в другой единице перевода - хороший и распространенный способ скрыть это от других единицы перевода.

или есть лучшие способы скрыть вспомогательные классы?

Если вы также удалите объявление из заголовка, тогда вспомогательный класс станет еще более приватным .

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

Какой подход лучше, зависит от условий.

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

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

...