C++ 使用运行时值字符串化宏
我想打印一个包含运行时值的宏。这可能吗?如果可能,如何实现C++ 使用运行时值字符串化宏,c++,macros,c++17,C++,Macros,C++17,我想打印一个包含运行时值的宏。这可能吗?如果可能,如何实现 #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)
#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*值+6;
#define STRINGIFY(macro,arg1)std::cout我不认为你可以用你想要的语法做任何事情(预处理器只是没有必要的内省功能)
我认为您更有可能成功使用某种表达式模板系统,您可以在其中编写以下内容:
auto doSomething = Magic(5) * Magic::arg + 6;
然后你可以写:
doSomething.generate(arg);
或
警告:我很确定上面的确切语法不会起作用,但这是一个开始。(我建议您查看Boost.Proto,但可能还有其他合适的库。)您没有在任何地方定义RETURN,也没有在任何地方使用DOSOMETHING。另外,您的意思是将STRINGIFY
的值设置为std::cout#define OUT(var)std::cout有什么问题?显然,您实际上不想打印argc的值-这只是一个示例问题。但是,你不清楚你想要达到什么。@ MartinBonner我修正了宏名字,我有一个运行时代码生成器,很多C++代码在字符串中让你很难理解会产生什么并测试它。使用宏,我至少能够编写测试并获得一些语法highlighting@StoryTeller ... 但这并不能解决OP的问题。他有一个运行时代码生成器,DOSOMETHING,呃,做了一些事情——但他希望能够调试它。
doSomething.generate(arg);
doSomething.print(arg)