我想打印一个内部带有运行时值的宏。这可能吗?如果可以,怎么办?
#include<iostream>
#define DOSOMETHING(value) 5 * value + 6;
#define STRINGIFY(macro, arg1) std::cout << macro( << arg1<< );
int main(int argc, char** argv)
{
STRINGIFY(DOSOMETHING, argc)
return 0;
}
这应该显示“ 5 *(argc的值)+ 6”,因此,如果argc为0,则显示“ 5 * 0 + 6”
这怎么办?
宏扩展后寻求的代码:
int main(int argc, char** argv)
{
std::cout << "5 * " << argc << " + 6";
return 0;
}
关键是要允许创建c ++代码生成器,而不必将所有代码都生成为字符串,这会禁用语法突出显示并使其很难测试。
答案 0 :(得分:1)
我认为您无法使用所需的语法来完成所需的操作(预处理器只是没有必要的自省功能)。
我认为您更有可能在某种表达模板系统上取得成功,您可以在其中编写如下内容:
auto doSomething = Magic(5) * Magic::arg + 6;
然后可以写:
doSomething.generate(arg);
或
doSomething.print(arg)
警告:我很确定上面的确切语法将不起作用-但这是一个开始的地方。 (我建议您看一下Boost.Proto,但很可能还有其他合适的库。)