正如 MSDN library here中所述,我想尝试一下 pimpl idiom。现在我有Foo.hpp
一个
template<typename T>
class Foo {
public:
typedef std::shared_ptr<Foo<T>> Ptr;
Foo();
private:
class Impl;
std::unique_ptr<Impl> pImpl;
};
尚未T
使用参数的地方。实现存储在Foo.cpp
template<typename T>
class Foo<T>::Impl {
public:
int m_TestVar;
};
template<typename T>
Foo<T>::Foo() : pImpl(new Impl) {
this->pImpl->m_TestVar = 0x3713;
}
目前编译器有两个错误和一个警告:
use of undefined type 'Foo<T>::Impl'; ... vc\include\memory in line 1150
can't delete an incomplete type; ... vc\include\memory in line 1151
deletion of pointer to incomplete type 'Foo<T>::Impl'; no destructor called; ... vc\include\memory in line 1152
这里有什么冲突,我该如何解决?
编辑。删除了对std::make_shared
基于一个旧版本的复制和粘贴失败的调用。