c++ - 在 C++ 中将多个子类包含到文件中的最佳方法是什么?

标签 c++ c++11 include

我敢肯定有人问过这样的问题,但我就是找不到。我可能使用了错误的词,如果是这样,指向正确方向的观点会很棒,我将删除这个问题。

无论如何,我正在制作我的第一个“更大”的项目,我现在有大量文件需要包含到其他文件中才能使项目正常运行。问题是包含所有这些文件看起来非常困惑并且可能导致不需要的包含/错误。例如我的意思;

假设我在一个名为 Spell.h & Spell.cpp 的文件中有一个名为 Spell 的类,它包含所有法术的一般信息(法力消耗、施法时间等),然后是一堆从 Spell 继承的不同的特定法术类,都在自己单独的文件中。我需要将这些法术包含在 Enemy 和 Character 类中,以便它们可以获得可用法术的列表,但这样做意味着我需要单独包含我需要的每个特定法术。这听起来既乏味又恶心。

我想知道是否有一种方法可以让我简单地调用类似“#include "AllSpells.h"”或“#include "CharacterSpells.h"' 之类的东西,然后将包含我想要包含的所有文件。

我知道我可以创建一个包含所需特定法术的空类,然后只包含该类(例如,有一个名为 AllSpells 的类 #includes 每个特定法术),但这听起来也很糟糕。

这似乎是一件很常见的事情,因此有一个“最佳”或“最佳”方法列表来做这样的事情是有道理的。非常感谢您在这里提出任何建议。

最佳答案

我提供以下编码指南,希望能帮助您决定是否在 .cpp 文件中#include .h 文件。

  1. 我找到了 Open-Closed Principle最有值(value)的原则之一。 如果您需要修改现有文件以支持新类型的Spell,您就违反了这一原则。

  2. 如果您可以使用前向声明,就使用它。不要包含 .h 文件。参见 When can I use a forward declaration?有关该主题的更多信息。

关于

I need to include these spells in the Enemy and Character class so that they can have a list of usable spells, but to do so would mean I need to individually include each specific spell I need. That sounds tedious and gross.

这并不严重,它是必不可少的和适当的。这可能很乏味,但可以通过重新查看您的代码并弄清楚是否可以在不需要显式引用 Spell 的子类型的情况下解决。

关于c++ - 在 C++ 中将多个子类包含到文件中的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54703768/

相关文章:

c++ - 将 STL 数据结构传递给 opencl 内核

c++ - 当我用基数2 ^ 20实现基数排序以对大小为500万的数组进行排序时,为什么该程序会陷入无限循环?

C++ static_cast 从 float** 到 void**

c++ - 从成员函数指针转换为另一种类型并返回,严格别名问题?

c++ - 命名空间内多种类型的模板化 ostream 运算符 <<

sql - Sequelize 包含、连接、限制关联表

c++ - 如何在不遇到多重包含错误的情况下包含 Psapi.h?

c - 如何获得复杂的 C 预处理器行为以简化动态程序汇编

c++ - 在编译时通过 constexpr 或模板函数获取多维 std::array 的大小

c++ - spirit::qi:组合 parser_factory 失败