我在头文件中有一些代码如下:
#include <memory>
class Thing;
class MyClass
{
std::unique_ptr< Thing > my_thing;
};
Run Code Online (Sandbox Code Playgroud)
如果我有一个CPP这个头不包含的Thing类型定义,那么这并不在VS2010 SP1的编译:
1> C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\include\memory(2067):错误C2027:使用未定义类型'Thing'
替换std::unique_ptr为std::shared_ptr和编译.
所以,我猜这是当前VS2010 std::unique_ptr的实现,需要完整的定义,而且完全依赖于实现.
或者是吗?它的标准要求中是否有某些东西使得std::unique_ptr实施只能使用前向声明?感觉很奇怪,因为它应该只有一个指针Thing,不应该吗?
我一直在玩Pimpl成语并从中获得各种好处.我唯一不太关注的是我在定义函数时得到的感觉.
我真的很喜欢减少代码差异和冗余,当我必须在当前项目中相对复杂的Impls中添加或更改函数时,我觉得我的代码不够好.
我的问题是,有哪些有效的方法可以暗示或模板化我的类,如果我要定义一个新函数,我只需编写一个明确的定义和实现,其余的仍然在空间上接近于代码中的明确; 如果我要更改功能,必要的更改将尽可能少?