【发布时间】:2013-12-16 20:27:49
【问题描述】:
在我的类中,我需要保留一个指向在我用来实现它的库中定义的结构的指针。由于这个库只在实现文件中使用,我想避免将它直接包含在头文件中。同时我想避免污染命名空间。因此我想做:
/* 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_;
}
有没有办法避免双重取消引用?由于未知的指针大小,我的第一个解决方案无法正常工作的原因是什么?
【问题讨论】:
-
'我的第一个解决方案是由于未知的指针大小而无法工作的原因吗?''non-working' 非常模糊,您具体的编译/运行时问题是什么?
-
这取决于我将实际原型放在哪里。如果它是私有的,它会抱怨这一点。如果它是公开的,它会抱怨 Foo 不是命名空间。
-
您可以查找私有实现模式 (PIMPL)。我相信我在大型设计模式书籍中读到过它。
标签: c++ pointers implementation pimpl-idiom