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)