前置声明,pImpl
当多个类相互包含 使用时候,为了编译速度,降低文件编译依赖关系,通常采用前置声明来解决,如
#pragma once class A; class Test { A *pimpl;// OK ,指针,大小已固定,没问题 };
test的h文件就没必要包含A.h了。操作延迟到cpp文件,包含就好多了,
但是前置声明有时候有一些问题,以下代码
#pragma once class A; class Test { A aa;// ERROR , A的大小是? 包含哪些操作? };
因为是前置声明,类A 到底是怎样的 test并不知道,比如在test类里面要操作A 肯定要出错,因为是不完整的类型定义
为很好解决这一问题 ,常用手法是pimpl,和第一种代码类似。
其他:bridge模式