C++ 在宏中取消大小调整

C++ 在宏中取消大小调整,c++,C++,在宏中,我可以使用字符串化操作符#: #定义字符串化(名称)#名称 不,这是不可能的。C++预处理器不能以任何方式将令牌分成更小的令牌。 你到底想做什么?几乎可以肯定有更好的方法。[从评论中提升] 预处理发生在编译之前,也就是运行时之前。您需要进行反思,而不必定义自己的规则,这需要某种形式的元数据,而C++没有。 我找不到哪里,但最近我看到了某处(也许,但据推测,它被推迟),将来可能会有一个反射到C++,所以可能有一个前景。我很好奇为什么你会想这么做,因为 > MyCuffy[/COD]需要是一

在宏中,我可以使用字符串化操作符
#

#定义字符串化(名称)#名称

不,这是不可能的。C++预处理器不能以任何方式将令牌分成更小的令牌。
你到底想做什么?几乎可以肯定有更好的方法。

[从评论中提升]
预处理发生在编译之前,也就是运行时之前。您需要进行反思,而不必定义自己的规则,这需要某种形式的元数据,而C++没有。
<>我找不到哪里,但最近我看到了某处(也许,但据推测,它被推迟),将来可能会有一个反射到C++,所以可能有一个前景。

我很好奇为什么你会想这么做,因为 > MyCuffy[/COD]需要是一个编译时字符串常量。(预处理器可访问的唯一字符串类型)?我相当确定这是不可能的。一个原因可能是没有人需要它。会有一些有趣的问题需要解决。事实上,我不需要这个,我只是好奇。在阅读了一个OP想要从用户输入调用函数的问题后,我问自己是否有一个非结构化操作符。不,这是不可能的。它只是使预处理器更加复杂(在宏语言中引入两种类型,“任意”和“请只使用字符串”),而不需要明显的需要。此外,取消字符串化也不是一件小事(什么是
UNSTRINGIZE(“\x9f”)
?)FWIW,事实上我几天前就遇到了这个问题。一些整数数据是以字符串形式编写的,我想在编译时处理这个整数,所以我想去掉引号(代码库太大,无法简单地更改整数).我早就知道这是不可能的,所以不要浪费时间了。你们太在意动机了;有时人们只是出于好奇而问问题。
#define STRINGIZE(name) #name

cout << STRINGIZE(SomeClass) << endl; // Prints "SomeClass"
#define RUN_FUNCTION(name) UNSTRINGIZE(name)();

void myFunction {
  cout << "Hello!" << endl;
}

RUN_FUNCTION("myFunction") // Prints "Hello!"