5

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

#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!"

如果没有,有什么原因吗?

4

2 回答 2

4

不,这是不可能的。C++ 预处理器不能以任何方式将标记分解为更小的标记。

你到底想做什么?几乎可以肯定有更好的方法来做到这一点。

于 2012-11-02T21:43:05.123 回答
2

[从评论中提升]
预处理发生在编译之前,也就是运行时之前。您需要反射来做到这一点,而无需定义自己的规则,这需要某种形式的元数据,而 C++ 没有。

我找不到在哪里,但我最近在某个地方(也许在这里,但根据维基百科,它已被推迟)在未来的某个时候可能会出现在 C++ 中,所以那里可能会有前景。

于 2012-11-05T21:39:29.073 回答