【问题标题】:C++ pre-processor #includeC++ 预处理器#include
【发布时间】:2019-07-08 15:29:54
【问题描述】:

我正在尝试将我的程序制作成多种语言,在开始时会询问用户是否想要语言 1 或语言 2。用户输入存储在一个变量中,然后使用 if 语句我得到用户选择的语言。

像这样:

std::cin >> language;

if(language == ENGLISH)
     {
     // Do something
     }
else if(language == SPANISH)
     {
     // Do something else
     }

接下来我将要翻译的每个函数存储为两个头文件,一个是英语,一个是西班牙语,两个头文件完全相同,除了每个输出都被翻译。

现在我做的是这样的

std::cin >> language;

if(language == ENGLISH)
     {
     #include "English.h"
     }
else if(language == SPANISH)
     {
     #include "Spanish.h"
     }

现在,#include 是一个预处理器指令,因此它会在 main 函数之前“执行”,有什么办法解决这个问题吗?

【问题讨论】:

  • 如果 i18n 这么简单就好了。恐怕您想要的方法是行不通的。
  • 天哪。包含文件中的文本在编译时插入。您应该实现数据驱动的方法,这意味着根据语言加载文件(xml、json、...)并使用这些数据。
  • 为什么不读取 LANG 环境变量?
  • 您可以将所有特定于语言的内容放入一个结构或类中并传递。一些应用程序使用查找表来获取翻译文本。

标签: c++ header include header-files


【解决方案1】:

现在,#include 是后处理器指令,因此它会在主函数之前“执行”

它是一个处理器指令。它不是在运行时“执行”的;源代码在编译之前进行了预处理。

有什么办法吗?

程序编译执行后无法运行预处理器。

更好的方法是不复制函数定义,而是在打印输出之前调用函数来翻译消息。这个翻译函数应该将一个参数字符串映射到一个翻译的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多