Есть некоторый класс PublicInterface, который должен быть доступен пользователю. В данный момент класс использует некоторые детали реализации ImplDetail:
class ImplDetail;
class PublicInterface
{
public:
virtual void DoSomethingGeneral(PublicInterface& obj) = 0;
public:
virtual ImplDetail& GetImplDetail() = 0;
};
примерно, следующим образом:
class PublicInterfaceImpl : public PublicInterface
{
private:
void Process(ImplDetail& implDetail);
public:
virtual void DoSomethingGeneral(PublicInterface& obj)
{
Process(obj.GetImplDetail());
}
public:
virtual ImplDetail& GetImplDetail()
{
static ImplDetail implDetail(42);
return implDetail;
}
};
Пользовательский код вызывать метод GetImplDetail в принципе не должен.
Вопрос: как лучше всего избавиться от GetImplDetail в публичном интерфейсе?