我有一个类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;
}
它不编译说
'Introduct_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样式强制转换或函数样式强制转换
我理解编译器错误的含义:它不知道RefCounted
是Data
的超类,因为Data
是不完整类型。但是,无论如何,在处理boost侵入指针时,有没有任何方法或技巧可以避免包含头Data.h
来加快编译速度?
我知道的解决问题的一个方法是确保头文件中没有(隐式(定义的A
构造函数或析构函数。最简单的例子是:
(头文件(
#include <boost/intrusive_ptr.hpp>
class Data;
struct A {
boost::intrusive_ptr<Data> data;
A();
~A();
};
void foo() {
A a;
}
然后,您将在某个地方有一个.cpp文件,它将定义(可以默认(a的构造函数和析构函数,并包括类Data
的定义。