我需要更换

GET("any_name")

String str_any_name = getFunction("any_name");

难的是如何剪掉该报价的标记。可能吗?任何想法?

有帮助吗?

解决方案

如何:

#define UNSAFE_GET(X) String str_##X = getFunction(#X);

或者,安全防范嵌套宏观问题:

#define STRINGIFY2(x) #x
#define STRINGIFY(x) STRINGIFY2(x)
#define PASTE2(a, b) a##b
#define PASTE(a, b) PASTE2(a, b)

#define SAFE_GET(X) String PASTE(str_, X) = getFunction(STRINGIFY(X));

使用:

SAFE_GET(foo)

这是什么是编制:

String str_foo = getFunction("foo");

关键点:

  • 使用##相结合的宏观参数的成一个单一的令牌(token=>的变量名称、等等)
  • #可转换成字符串宏观参数(非常有用的时候这样做"反射"在C/C++)
  • 使用的前缀为您的宏,因为他们都是在相同的"空间"和你不想碰撞与任何其他代码。(我选择了玛娜瓦雷的基础上你的用户名)
  • 包装的宏帮助如果你窝宏,即呼叫MLV_GET从另一个宏与其他合并/stringized参数(如下面的评论,谢谢!).

其他提示

一种方法是在调用宏时不引用名称:

#include <stdio.h>

#define GET( name ) \
    int int##name = getFunction( #name );   \


int getFunction( char * name ) {
    printf( "name is %s\n", name );
    return 42;
}

int main() {
    GET( foobar );
}

在回答你的问题时,不,你不能“脱光”。 C ++中的引号。但正如其他答案所示,您可以“添加它们”。既然你总是使用字符串文字(对吧?),你应该可以切换到新方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top