C++ 条件包含文件运行时

标签 c++ include

我正在开发一个用 C++ 编码的游戏,我希望能够在运行时更改语言。目前,语言是在编译时通过包含头文件(具有语言定义)来选择的,如下所示:

#include "lan_eng.h"

因此,一旦客户端编译完成,游戏就不允许更改语言。我的问题是是否有一种方法可以在运行时有条件地包含文件?我是 C++ 的新手,所以起初我想我可以做这样的事情:

#define DEF_LANGUAGE_ENG
//#define DEF_LANGUAGE_DEN

#ifdef DEF_LANGUAGE_ENG

    #include "lan_eng.h"

#endif

#ifdef DEF_LANGUAGE_DEN

    #include "lan_den.h"

#endif

当然这样更容易维护,但问题是我认为它只在编译时有效。我希望能够将所选语言存储在一个变量(在运行时更改)中,然后使用该变量来选择要包含的头文件。有没有办法用头文件做到这一点,或者我会被迫制作一个类吗?

我希望这不是一个愚蠢的问题;我的搜索没有给我希望的结果。

提前致谢!

最佳答案

您不能在运行时更改#include,因为它们仅在编译时进行评估。

您可以做的是拥有“语言表”。您可以构建一个在运行时引用的系统,或者您可以拥有多个文本文档(例如 .xml 文件),当您想要更改语言时可以读取和存储这些文档。这样做还允许您的应用程序在未来被软件用户扩展,因为它不会被硬编码。

如果您以这种方式设计它,您可以将所有“语言表”保存在一个文件夹中,然后让您的程序检查该文件夹中所有可用的语言表。这将允许用户也向您的程序添加语言。

您基本上需要做的是创建一个字符串表,这可以作为硬编码方法的一部分来完成,也可以作为更动态的方法(在语言表中提及)的一部分来完成。

关于C++ 条件包含文件运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8930360/

相关文章:

c++ - 包含特定 boost header 时标准非 boost 文件中的错误

c - #includes 在 C 文件中用于处理器特定的实现

java - 单个方法的调用图(c++ 和 java)

C++ 容器和实体类

c++ - 递归数据结构的前向声明

sql - 如何从 PostgreSQL 中的 sql 脚本导入外部 sql 脚本?

c++ - 为什么 #include "stdio.h"有效?

c++ - 如何使用智能指针调用包装对象的方法

c++ - 二进制文件和兼容性标准信息 - C++/JAVA

c - OpenCL 在 code::blocks 中包括 cl.h on Windows