如何转发声明boost智能ptr
How to forward declare boost smart ptr?
此代码编译失败:
namespace boost
{
template<class T> class scoped_ptr;
}
namespace FooNamespace
{
class FooClass
{
boost::scoped_ptr<FooType> foo;
};
}
g++表示:error: field ‘foo’ has incomplete type
我认为这是可以的,因为我从实际的boost头文件复制了scope_ptr声明。。。我搞砸了什么?
注意:问题不在FooType
中。我试着用int
代替它,但没有用。。。
谢谢!
如果前向声明类型的大小必须已知,则前向声明不起作用。由于要在FooClass
中嵌入boost::scoped_ptr<T>
的实例,因此必须知道该类型的大小。
您可以嵌入一个指针,但这可能会首先破坏scoped_ptr<T>
的目的。然而,它会编译:
class FooClass
{
boost::scoped_ptr<FooType> *foo;
};
对不完整类型(即已声明但未定义的类型)的处理有限制;你不能做的一件事就是定义那种类型的变量。这是因为在这种情况下,为了计算对象中成员变量的布局,必须知道大小。
您可以做的事情包括使用对类型的指针或引用(只要您不取消引用它),用该类型声明一个函数作为参数或返回值,以及声明该类型的静态或非成员变量。
相关文章:
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 隐式声明的 boost::iostreams::mapped_file_source 已被弃用
- 如何使用 Boost.Hana 声明成员变量
- boost::hana 转发声明标头的用例是什么?
- 如何将前向声明与 boost::msm 一起使用以避免循环依赖?
- 使用 boost program_options时,如何确保声明具有C++的存储类或类型说明符?
- 在此范围内未声明C boost -_______SERT_FAIL
- 声明“const”“boost::range”的正确方法
- 我如何转发声明boost ::精神统治
- Boost MPL-按顺序声明每种类型的类
- 为什么 boost::qi 规则的属性必须用括号声明?
- 如何声明Boost范围适配器(例如MAP_VALUES)
- 正向声明boost.type_erasure引用类型
- boost:asio ::UnregisterWaitEx 尚未声明
- 使用 boost::spirit 解析类似 c 结构的声明
- 为什么预先声明 std::basic_string<T> 会破坏 boost::regex?
- 正向声明boost::multi_index_container对象
- 如何转发声明boost智能ptr
- 如何在mpl::list中声明boost递归变体
- 如何转发声明 boost::p tree::iterator