boost::intrusive_ptr类的前向声明可减少编译时间



我有一个类A,它使用boost::intrusive_ptr:保存一些数据

#include "Data.h"
class A {
boost::intrusive_ptr<Data> data;
}

Data是基类RefCounted的后继,根据需要实现函数intrusive_ptr_releaseintrusive_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样式强制转换或函数样式强制转换

我理解编译器错误的含义:它不知道RefCountedData的超类,因为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的定义。

最新更新