C++ 如何转发boost智能ptr?
此代码无法编译:C++ 如何转发boost智能ptr?,c++,boost,C++,Boost,此代码无法编译: namespace boost { template<class T> class scoped_ptr; } namespace FooNamespace { class FooClass { boost::scoped_ptr<FooType> foo; }; } namespace boost { 模板类作用域\u ptr; } 名称空间 { 班级 { boost::范围有限的\u ptr foo; }; } g++说:错误:字段
namespace boost
{
template<class T> class scoped_ptr;
}
namespace FooNamespace
{
class FooClass
{
boost::scoped_ptr<FooType> foo;
};
}
namespace boost
{
模板类作用域\u ptr;
}
名称空间
{
班级
{
boost::范围有限的\u ptr foo;
};
}
g++说:错误:字段“foo”的类型不完整
我认为这是可以的,因为我从实际的boost头文件复制了作用域_ptr声明。。。我搞砸了什么
注意:问题不在FooType
中。我试着用int
替换它,但没有用
谢谢 如果必须知道前向声明类型的大小,则前向声明不起作用。由于要在
FooClass
中嵌入boost::scoped_ptr
的实例,因此必须知道该类型的大小
您可以嵌入一个指针,但这可能会首先破坏作用域\u ptr
的目的。然而,它将汇编:
class FooClass
{
boost::scoped_ptr<FooType> *foo;
};
class类
{
boost::作用域_ptr*foo;
};
对不完整类型(即已声明但未定义的类型)的处理有限制;您不能做的一件事是定义这种类型的变量。这是因为大小必须是已知的,在这种情况下,为了计算出对象中成员变量的布局
您可以做的事情包括使用类型的指针或引用(只要您不取消引用它),将该类型作为参数或返回值声明函数,以及声明该类型的静态或非成员变量。哦,我明白了。我想我得用
auto\ptr
了。我不想让my.h的用户必须包含boost或支持C++11(目前)-/