Есть либа с несколькими взаимосвязанными классами. Делаю для неё public-интерфейс по идиоме pimpl.
Но столкнулся с трудностью, что некоторые классы не должны выставлять наружу некоторых методов, но они используются внутри самой библиотеки. Выход — оперировать внутри библиотеки только impl-версиями классов, а наружу конвертировать их в public-версии. Но не могу придумать как это сделать
Также потребуется и обратная конвертация — из public-версии в impl-версию.
class A {
public:
void doSomething();
private:
class AImpl;
AImpl* m_impl;
};
class AImpl {
public:
void doSomething();
void doSomethingOnlyFromLib(); // этот метод используется только внутри библиотеки, наружу выставлять его нет смысла
};
или все-таки хреновый дизайн раз такого хочется ?