如果我有一个类似以下的纯虚拟类:
我有以下类结构:
class interface_class {
virtual void someFunction(MyClassA& a) = 0;
virtual void someFunction(MyClassB& b) = 0;
}
包含MyClassA / MyClassB的正确方法是什么?我应该在接口类的头文件中做一些前向声明,并在实现的头文件中真正包含,还是应该直接在接口类中包含MyClassA / B的头文件?
答案 0 :(得分:5)
对两个类使用前向声明 实际上,无论何时何地都要使用前瞻性声明 使用前向声明可以节省编译时间和时间。还限制您创建不需要的依赖项。
答案 1 :(得分:1)
您应该在单独的头文件中使用前向声明。
即您拥有当前头文件,其定义为MyClassA
和MyClassB
。您需要同时对使用的类进行分组,并创建一个新的头文件,如下所示:
文件MyClassesFwd.h
(由您决定的命名惯例)
namespace XX {
class MyClassA;
class MyClassB;
}
您的界面标题:
#include <MyClassesFwd.h>
// ... your interface definition ...
另一方面,实际的源文件将如下所示:
#include <MyClassA.h>
#include <MyClassB.h>
#include <MyInterface.h>
这将阻止您每次都重写前向声明。