tow*_*owi 9 c++ compiler-construction syntax self-modifying
我有一个文件 module.hpp
struct ModuleBase {
virtual void run() = 0;
};
Run Code Online (Sandbox Code Playgroud)
和一个main.cpp
程序
int main() {
cout << ...?...; // here should go the contents of module.hpp
}
Run Code Online (Sandbox Code Playgroud)
我可以用什么来...?...
打印头文件的内容?
一个基本的想法是
int main() {
static const string content = R"(
#include <module.hpp>
)";
cout << content;
}
Run Code Online (Sandbox Code Playgroud)
但多线串仅适用于C++ 11,而#include
不会没有多行字符串内工作(这是很好的)?
如果gcc有一个不可移植的方式......那将是一个开始.
澄清(更新):替换应在编译时完成.
我所知道的唯一真正的解决方案是编写一个小程序,将文件转换为包含它的字符串变量的C++定义.这写起来相当简单:输出一个简单的标题:
char const variableName[] =
Run Code Online (Sandbox Code Playgroud)
然后复制文件的每一行,将其包装"...\n"
,并转义任何必要的字符.(如果你能确定C++ 11,那么你可以做一些事情R"..."
,但我没有经验.)
[更新时间:指的在这一个错字原题]:
您的解决方案应该不能工作; 如果是,则编译器中出错.根据§2.2,标记化发生在
执行预处理指令之前.所以,当预处理指令的执行时,你有一个字符串文字,并没有一个#
预处理标记.(使用C++ 11功能时会出现编译器错误.实施者还没有足够的时间来解决所有错误.)