【发布时间】:2018-12-13 18:00:32
【问题描述】:
我有 A 类,它使用 boost::intrusive_ptr 保存一些数据:
#include "Data.h"
class A {
boost::intrusive_ptr<Data> data;
}
类Data 是基类RefCounted 的继承者,其函数intrusive_ptr_release 和intrusive_ptr_add_ref 是根据需要实现的。
我要减少编译时间,所以我尝试使用前向声明:
class Data;
class A {
boost::intrusive_ptr<Data> data;
}
它不编译说
'intrusive_ptr_release':未找到标识符
我尝试添加所需函数的声明:
class Data;
void intrusive_ptr_add_ref(RefCounted *);
void intrusive_ptr_release(RefCounted *);
class A {
boost::intrusive_ptr<Data> data;
}
现在它说
'void intrusive_ptr_release(RefCounted *)': 无法转换参数 1 从 'Data *' 到 'RefCounted *' 指向是不相关的;转换 需要 reinterpret_cast、C-style cast 或 function-style cast
我理解编译器错误的含义:它不知道RefCounted 是Data 的超类,因为Data 是一个不完整的类型。但是,无论如何,这里有什么方法或技巧可以避免在处理 boost 侵入指针时包含标头 Data.h 以加快编译速度?
【问题讨论】:
标签: c++ boost forward-declaration