我有一个文件 module.hpp
struct ModuleBase {
virtual void run() = 0;
};
和一个main.cpp
程序
int main() {
cout << ...?...; // here should go the contents of module.hpp
}
我可以在...?...
放什么来让头文件的内容打印在这里?
一个基本的想法是
int main() {
static const string content = R"(
#include <module.hpp>
)";
cout << content;
}
但多行字符串仅在 C++11 中可用,#include
是否不能在多行字符串中工作(这很好)?
如果 gcc 有一个不可移植的方法...那将是一个开始。
澄清(更新):替换应该在编译时完成。
最佳答案
我所知道的唯一真正的解决方案是编写一个小程序 将文件转换为字符串变量的 C++ 定义 包含它。这写起来相当简单:输出一个简单的 header 如下:
char const variableName[] =
然后复制文件的每一行,将其包装在"...\n"
中,然后
转义任何必要的字符。 (如果你能确定
C++11,那么你也许可以用 R"..."
做一些事情,但是
我没有这方面的经验。)
[更新:指的是其中有错字的原始问题]:
你的解决方案应该不有效;如果是,这是一个错误
编译器。根据 §2.2, token 化发生在之前
执行预处理指令。所以当
预处理指令的执行发生,你有一个字符串
文字,不是 #
预处理标记。 (编译错误
在使用 C++11 功能时是可以预期的。没有过
实现者有足够的时间来解决所有错误
出。)
关于c++ - 如何使#include-file 的内容成为 cpp 文件中的编译时常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13970548/