В моем классе мне нужно сохранить указатель на структуру, которая определена в библиотеке, которую я использую для ее реализации. Поскольку эта библиотека используется только в файле реализации, я бы хотел не включать ее в заголовок напрямую. В то же время я хочу избежать загрязнения пространства имен. Таким образом, я хотел бы сделать:Типичный прототип частной структуры в исходном файле
/* HEADER */
class Foo {
private:
struct ImplementationDetail;
ImplementationDetail * p;
};
/* SOURCE */
#include <Library.h>
using Foo::ImplementationDetail = Library::SomeStruct;
Но это не работает, и я в настоящее время отступая на Pimpl:
/* HEADER */
class Foo {
private:
struct ImplementationDetail;
ImplementationDetail * p_;
};
/* SOURCE */
#include <Library.h>
struct ImplementationDetail {
Library::SomeStruct * realp_;
}
Есть ли способ, чтобы избежать двойного разыменования? Является причиной моего нерабочего первого решения из-за неизвестных размеров указателя?
_ «Является причиной моего нерабочего первого решения из-за неизвестных размеров указателя?» «Неработающий» довольно расплывчатый, каковы ваши конкретные проблемы компиляции/времени выполнения? –
Это зависит от того, где я поставлю фактический прототип. Если он является частным, он жалуется на это. Если он является общедоступным, он жалуется, что Foo не является пространством имен. – Svalorzen
Вы можете найти шаблон частной реализации (PIMPL). По-моему, я читал об этом в большой книге Design Patterns. –