seg*_*ult 0 c++ templates forward-declaration
我正在寻找一本好书,参考材料,涉及类的前向声明,特别是。当源位于多个目录中时,例如。dirA 中的 A 类在 dirB 中的 B 类中向前声明?这是怎么做到的?
另外,有任何有关模板问题、高级用途和实例化问题的材料吗?
谢谢。
小智 5
前向声明与项目的目录结构无关。即使项目中不存在,您也可以转发声明。它们主要用于解决类之间的循环引用,以及在不需要完整的类声明时加快编译速度,相应的#include 可以用前向声明替换。
要确定前向声明何时足够,sizeof() 查询通常可以回答该问题。例如,
class Wheel;
class Car
{
Wheel wheels[4];
};
Run Code Online (Sandbox Code Playgroud)
在此声明中,不能使用前向声明,因为编译器无法确定 Car 的大小:它不知道车轮包含多少数据。换句话说,sizeof(Car)是未知的。
另外,关于模板,如果模板类包含模板参数的数据成员(但它们的指针可以),则前向声明的类不能用作模板参数。例如,
template<class T> class pointer
{
T *ptr;
};
class Test;
pointer<Test> testpointer;
Run Code Online (Sandbox Code Playgroud)
是合法的,但是
std::vector<Test> testvector不会编译。
由于上述限制,前向声明的类通常用作指针或引用。
我不知道是否有关于这个主题的书,但你可以看到关于 c++ faq lite 的这一部分。
| 归档时间: |
|
| 查看次数: |
932 次 |
| 最近记录: |