Я хочу создать библиотеку классов с использованием идиомы pimpl, чтобы я мог скрывать детали реализации для пользователя библиотеки.класс библиотека и доступность класса pimpl - разбиение класса
Возможно ли создать класс, в котором некоторые методы являются общедоступными и могут быть вызваны с точки зрения пользователей, имея методы, которые могут быть вызваны только из внутренних элементов.
Прямо сейчас я вижу только решение с ключевым словом friend и объявлением внутренних методов private.
Например: MyPartiallyVisibleClass: класс, содержащий смесь доступных для пользователя методов и методы, доступные только для внутренних библиотек. Внутренний класс: класс внутри библиотеки. Пользователь никогда не узнает этого актера.
// MyPartiallyVisibleClass.h: Will be included by the user.
class MyPartiallyVisibleClass
{
private:
class Impl; // Forward declare the implementation
Impl* pimpl;
InternalMethod(); // Can only be called from within the library-internals.
public:
UserMethod(); // Will be visible and callable from users perspective.
}
// MyPartiallyVisibleClass.cpp
class MyPartiallyVisibleClass::Impl
{
private:
InternalMethod();
public:
UserMethod();
friend class InternalClass;
}
// Internal class that will not be included into users application.
class InternalClass
{
public:
InternalMethod()
{
MyPartiallyVisibleClass pvc;
pvc.InternalMethod();
}
}
Есть ли лучший способ сделать это?
Зачем вам это нужно? Самый простой способ - поместить только общедоступные методы в пользовательский класс и оставить все детали gory для реализации (ов). – juanchopanza
Повторяющийся кандидат: http://stackoverflow.com/questions/843389/the-pimpl-idiom-in-practice – lpapp
НЕ ДУБЛИКАТ: этот вопрос более конкретный. если не рассматривать каждый вопрос, говорящий о pimpl дубликат ... –