C++ boost::intrusive_ptr类的前向声明可减少编译时间
我有一个类C++ boost::intrusive_ptr类的前向声明可减少编译时间,c++,boost,forward-declaration,C++,Boost,Forward Declaration,我有一个类A,它使用boost::intrusive\u ptr保存一些数据: #include "Data.h" class A { boost::intrusive_ptr<Data> data; } 这不是一句谚语 “侵入性发布”:找不到标识符 我尝试添加所需函数的声明: class Data; void intrusive_ptr_add_ref(RefCounted *); void intrusive_ptr_release(RefCounted *);
A
,它使用boost::intrusive\u ptr
保存一些数据:
#include "Data.h"
class A {
boost::intrusive_ptr<Data> data;
}
这不是一句谚语
“侵入性发布”:找不到标识符
我尝试添加所需函数的声明:
class Data;
void intrusive_ptr_add_ref(RefCounted *);
void intrusive_ptr_release(RefCounted *);
class A {
boost::intrusive_ptr<Data> data;
}
类数据;
无效侵入性添加参考(参考计数*);
无效侵入性释放(参考计数*);
甲级{
boost::侵入性的ptr数据;
}
现在它说
“无效侵入性释放(RefCounted*)”:无法转换参数1
从指向的“Data*”到“RefCounted*”是不相关的;转换
需要重新解释类型转换、C样式转换或函数样式转换
我理解编译器错误的含义:它不知道
RefCounted
是Data
的超类,因为Data
是不完整的类型。但是,无论如何,这里是否有任何方法或技巧可以避免在处理boost入侵指针时包含headerData.h
以加快编译速度?我知道解决问题的一个方法是确保头文件中没有(隐式地)为A
定义构造函数或析构函数。最简单的示例如下所示:
(头文件)
#包括
类数据;
结构A{
boost::侵入性的ptr数据;
A();
~A();
};
void foo(){
A A;
}
然后,您将在某个地方有一个.cpp文件,它将定义(可能是默认的)一个类的构造函数和析构函数,并包括类
数据的定义非常棒的答案。有趣的是(对我来说有点违反直觉),为了加快编译速度,必须牺牲运行时性能(我的意思是使ctor/dtor不内联)。@Nick但情况总是这样。通过使内容不内联,您牺牲了编译时间内联并提高了编译速度。不过,LTO可能会来救援。
class Data;
void intrusive_ptr_add_ref(RefCounted *);
void intrusive_ptr_release(RefCounted *);
class A {
boost::intrusive_ptr<Data> data;
}
#include <boost/intrusive_ptr.hpp>
class Data;
struct A {
boost::intrusive_ptr<Data> data;
A();
~A();
};
void foo() {
A a;
}