在宏内部进行Unstringize

时间:2012-11-02 21:38:48

标签: c++

在宏内部,我可以使用字符串化运算符#

#define STRINGIZE(name) #name

cout << STRINGIZE(SomeClass) << endl; // Prints "SomeClass"

是否可以在宏内执行相反的操作 unstringize ?怎么样?

例如:

#define RUN_FUNCTION(name) UNSTRINGIZE(name)();

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

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

如果没有,是否有原因?

2 个答案:

答案 0 :(得分:3)

不,这是不可能的。 C ++预处理器无法以任何方式将令牌分解为较小的令牌。

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

答案 1 :(得分:1)

[评论推荐]
预处理在编译之前进行,即在运行之前。你需要反思才能做到这一点,而不是定义你自己的规则,这需要某种形式的元数据,而C ++没有它。

我找不到哪里,但是我最近在某个地方(也许here看到了,但根据Wikipedia,它被推迟了)反思可能会在未来某个时候进入C ++,所以那里可能是那里的前景。