Pimpl идиома в C ++ и частный конструктор

В идиоме pimpl все закрытые члены и функции перемещаются в (приватный) класс реализации. Что делать, если у класса есть приватный конструктор? Должно ли оно быть перенесено в реализацию? Если да, то как?

class X {
private:
X();  // moving it to XImpl???
public:
void DoSomething();
private:
class XImpl;
std::unique_ptr<XImpl> pimpl;
};

0

Решение

PIMPL предназначен для удаления нежелательной зависимости от публичного заголовка по разным причинам. Например, заголовки C используют слово class (правильность), большие заголовки, добавляющие время сборки (эффективность работы), заголовки с плохими макросами (хрупкость кода). Доступность C ++, private против public или же protected, не имеет к этому никакого отношения, хотя не совсем неестественно, если доступность сильно коррелирует с тем, принадлежат ли функции классу PIMPL или нет: обычно эти функции будут деталями реализации.

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

Не применяйте вслепую различные техники, основанные на механических правилах, подобных кулинарной книге. И когда вы ясно видите, что такой набор правил, который вам представлен, неполон, как здесь, тогда правильная реакция — отклонить набор правил, а не просить о его завершении. Это не может быть завершено, вопрос, к которому это приводит, что делать с private Конструктор не имеет смысла.

3

Другие решения


По вопросам рекламы [email protected]