我不确定是否使用了正确的术语,但我的问题是将一个宏调用(“PLUGIN_NAME”)作为另一个宏调用(“IMPLEMENT_MODULE”)的参数,后者将其作为字符串打印出来时,将该参数打印为宏调用(“somePLUGIN_NAME”),而不是展开结果(“someSomePluginName”)。
请注意,“IMPLEMENT_MODULE”是一个API调用,因此我无法更改它。
#define IMPLEMENT_MODULE(name) something##name
#define PLUGIN_NAME SomePluginName
#define _STR(s) #s
#define STR(s) _STR(s)
#define PLUGIN_NAME_STR STR(PLUGIN_NAME)
int main()
{
string expected = "somethingSomePluginName";
string actual = STR(IMPLEMENT_MODULE(PLUGIN_NAME));
printf("expected: %s || actual: %s\n", expected.c_str(), actual.c_str());
assert(expected == actual);
}
我已经把它放在这里:http://codepad.org/FRzChJtD