我正在开发一个库,并希望为我的用户提供一个与隐藏在名称空间中的真实实现分开的公共接口。这样,我就可以只更改HiddenQueue类而不更改myQueue,它只会暴露给用户。隐藏使用名称空间的内部类实现
如果我将HiddenQueue的C++代码放入myQueue.cpp文件,编译器会抱怨说_innerQueue的类型不完整。我认为链接器能够解决这个问题。我在这里做错了什么?
// myQueue.h
namespace inner{
class HiddenQueue;
};
class myQueue{
public:
myQueue();
);
private:
inner::HiddenQueue _innerQueue;
};
///////////////////////////
// myQueue.cpp
namespace inner{
class HiddenQueue{};
};
+1 PIMPL。这里有一篇文章来自创造这个术语的人:http://www.gotw.ca/gotw/024.htm – 2010-05-11 14:41:41
嗯,在底线PIMPL招致一些运行时速度成本,并为您提供便于维护和编译速度的收益。无可否认,在一般情况下运行时速度成本并不是问题(如果不是这样,你可能知道这很重要),但恕我直言,在代码库中不需要小于一定大小的PIMPL。 – Jon 2010-05-11 14:46:57