在纯虚拟类中包含头文件

headerfile inclusion in pure virtual classes

本文关键字:包含头 文件 虚拟      更新时间:2023-10-16

如果我有一个像下面这样的纯虚拟类:

我有如下的类结构:

class interface_class {
    virtual void someFunction(MyClassA& a) = 0;
    virtual void someFunction(MyClassB& b) = 0;
}

包含MyClassA/MyClassB的正确方式是什么?我应该在接口类的头文件中做一些前向声明,并在实现的头文件进行真正的包含,还是应该将MyClassA/B的头文件直接包含在接口类中?

对这两个类都使用正向声明
事实上,在任何可能的地方都要使用正向声明
使用正向声明可以节省编译时间&还限制您创建不需要的依赖项。

您应该在单独的头文件中使用正向声明。

也就是说,您已经拥有了定义为MyClassAMyClassB的当前头文件。您需要对同时使用的类进行分组,并创建一个新的头文件,如下所示:

文件MyClassesFwd.h(命名约定由您决定)

namespace XX {
     class MyClassA;
     class MyClassB;
}

您的界面标题:

#include <MyClassesFwd.h>
// ... your interface definition ...

另一方面,实际的源文件看起来是这样的:

#include <MyClassA.h>
#include <MyClassB.h>
#include <MyInterface.h>

这将防止您每次都重写正向声明。