使用运行时值字符串化宏
Stringify macro with runtime values
我想打印一个包含运行时值的宏。这是否可能,如果可能,如何?
#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++ 代码生成器,而无需在字符串中生成所有代码,这会禁用语法突出显示并使其非常难以测试。
我不认为你可以用你想要的语法做你想做的事(预处理器只是没有必要的内省功能)。
我认为您更有可能在某种表达式模板系统中取得成功,您可以在其中编写以下内容:
auto doSomething = Magic(5) * Magic::arg + 6;
然后可以写:
doSomething.generate(arg);
或
doSomething.print(arg)
警告:我很确定上面的确切语法不起作用 - 但这是一个开始的地方。 (我建议看看Boost.Proto,但很可能还有其他合适的库。
相关文章:
- 字符串函数在目标C++上运行时C++返回空
- 在 c++ 中将集合转换为向量和向量转换为字符串时出现运行时异常
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 如何修复我的字符串以避免运行时错误?
- 字符串::插入产生运行时错误
- Visual C 运行时:Malloc将指针返回到已经使用的内存(包含实际字符串)
- 在不使用容器或字符串库的情况下,在运行时增加动态数组大小
- 一个人如何从代表函数的字符串中执行运行时执行C 代码
- C 运行时成员函数通过字符串名称访问
- 为什么此代码使用带有字符串(C )的MAP具有运行时错误
- 如何在运行时显示QT中的字符串列表
- 字符串::substr() 在 C++ 中的运行时是什么
- 为什么必须在运行时构造字符串
- C++:将字符串流转换为 char* 运行时错误
- 在VC2010中使用Char数组显示字符串时发生运行时错误
- 使用字符串向量初始值设定项时,我收到运行时错误"terminate called after throwing instance of `std::length_error`"
- 在运行时从指针到指针数组中删除字符串时出错
- 为每个使用内部字符串时运行时错误
- c++ char*转字符串运行时错误