前向声明 boost::intrusive_ptr class 以减少编译时间
Forward declaration for boost::intrusive_ptr class to reduce compile time
我有 class A
使用 boost::intrusive_ptr
:
保存一些数据
#include "Data.h"
class A {
boost::intrusive_ptr<Data> data;
}
Class Data
是基础 class RefCounted
的继任者,其功能 intrusive_ptr_release
和 intrusive_ptr_add_ref
是根据需要实现的。
我要减少编译时间,所以我尝试使用前向声明:
class Data;
class A {
boost::intrusive_ptr<Data> data;
}
编译不说
'intrusive_ptr_release': identifier not found
我尝试添加所需函数的声明:
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 *)': cannot convert argument 1
from 'Data *' to 'RefCounted *' pointed to are unrelated; conversion
requires reinterpret_cast, C-style cast or function-style cast
我理解编译器错误的含义:它不知道 RefCounted
是 Data
的超 class 因为 Data
是一个不完整的类型。但是,无论如何,这里有什么方法或技巧可以避免包含 header Data.h
以在处理 boost 侵入式指针时加快编译速度?
我知道解决您的问题的一种方法是确保在您的头文件中没有(隐式)为 A
定义的构造函数或析构函数。最小示例如下所示:
(头文件)
#include <boost/intrusive_ptr.hpp>
class Data;
struct A {
boost::intrusive_ptr<Data> data;
A();
~A();
};
void foo() {
A a;
}
然后,你会在某处有一个 .cpp 文件,它会为 A 定义(可能默认)构造函数和析构函数,并包含 class Data
.
的定义
我有 class A
使用 boost::intrusive_ptr
:
#include "Data.h"
class A {
boost::intrusive_ptr<Data> data;
}
Class Data
是基础 class RefCounted
的继任者,其功能 intrusive_ptr_release
和 intrusive_ptr_add_ref
是根据需要实现的。
我要减少编译时间,所以我尝试使用前向声明:
class Data;
class A {
boost::intrusive_ptr<Data> data;
}
编译不说
'intrusive_ptr_release': identifier not found
我尝试添加所需函数的声明:
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 *)': cannot convert argument 1 from 'Data *' to 'RefCounted *' pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
我理解编译器错误的含义:它不知道 RefCounted
是 Data
的超 class 因为 Data
是一个不完整的类型。但是,无论如何,这里有什么方法或技巧可以避免包含 header Data.h
以在处理 boost 侵入式指针时加快编译速度?
我知道解决您的问题的一种方法是确保在您的头文件中没有(隐式)为 A
定义的构造函数或析构函数。最小示例如下所示:
(头文件)
#include <boost/intrusive_ptr.hpp>
class Data;
struct A {
boost::intrusive_ptr<Data> data;
A();
~A();
};
void foo() {
A a;
}
然后,你会在某处有一个 .cpp 文件,它会为 A 定义(可能默认)构造函数和析构函数,并包含 class Data
.