Предположим, у меня есть класс, как это (упрощенный):Что это за шаблон? Как это использовать?
class Foo_p;
class Foo
{
private:
Foo_p *p;
public:
Foo();
/* methods, etc... */
};
Этот класс является частью API. Foo_p - это все частные части класса, которые не являются , объявленными как обычно в классе Foo, а скорее в отдельном классе, объявленном вперед, который используется только для реализации, не видимой снаружи.
Я видел этот шаблон, используемый в нескольких проектах, есть ли название для него?
Кроме того, как правильно его использовать (например, безопасность исключений и т. Д.)? Куда должна идти фактическая реализация? В классе Foo, как обычно, используется только Foo_p для хранения данных или в классе Foo_p с Foo, являющимся просто оболочкой?
Не как заголовки и нормальные уровни защиты (государственные/частные) «по существу скрыть реализацию»? –
@ Матвей: К сожалению, нет. Вы должны включить заголовки реализации, которые часто могут быть неудобными, когда они зависят от, например, заголовков Windows, которые, к сожалению, являются плохими. – Puppy
@MatthewFlaschen: Да, но только в том смысле, что вы не можете получить к нему доступ, но вы все еще можете видеть это, глядя на код. – bitmask