-3
在问题中有很多东西,但是有没有什么办法可以获得使用模板类使用不透明ptr的封装? (我的直觉是“不”,因为编译器必须知道编译时的一切)模板和不透明指针是否继承不兼容?
就像这样,MyClass应该通过静态库公开,而MyClassImp是隐藏的。
//MyClass.h
template <typename T> MyClassImp;
template <typename T> MyClass
{
public:
MyClass();
void Foo();
private:
MyClassImp<T>* impl;
}
//MyClassImp.h
template <typename T> MyClassImp
{
public:
MyClassImp() {}
void Foo() {/*proprietary/complex stuff I want to hide*/}
}
//MyClass.cpp
template <typename T>
MyClass::MyClass()
{
impl = new MyClassImp();
}
template <typename T>
void MyClass::Foo() { impl->Foo(); }
这不起作用,因为MyClass的::富,藏在.cpp文件,不能没有包括MyClassImp的定义暴露出来,所以你得到一个功能缺失的错误。
是的,对不起,只是扔在一起psudo代码。问题是,如果你确实使用了impl中的任何东西,你必须在头文件中声明整个类,否定opaque ptr的目的。 – IdeaHat 2013-03-20 18:31:16