String str_any_name = getFunction("any_name");
困難的部分是如何修剪掉引號替換
GET("any_name")
。可能?有任何想法嗎?
String str_any_name = getFunction("any_name");
困難的部分是如何修剪掉引號替換
GET("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");
個
要點:
一種方法是不是當你調用宏引用名稱:
#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++的報價。但正如其他答案所示,您可以「添加它們」。既然你總是使用字符串文字(對吧?),你應該可以切換到新的方法。
一個註釋 - 使用令牌粘貼和字符串化操作符應間接使用類似函數的宏來完成,以防止在宏觀參數中使用它們時出現問題。請參閱:http://stackoverflow.com/questions/216875/in-macros/217181#217181 – 2009-04-30 15:20:33