我正在尝试做一些代码生成。
当我想用参数设置返回值的类型时,编译失败。为什么编译器返回错误?
#define MODULE_GETTER(module_type, interface_type)
public:
static #interface_type * Instance##interface_type (void)
{
return NULL;
}
class MyModuleType :
public IMyModuleInterface
{
MODULE_GETTER(MyModuleType,IMyModuleInterface)
private:
...
};
当我将static #interface_type *
更改为static int *
或任何其他预定义类型时,代码编译时没有错误。
我做错了什么?
在宏定义中,#
是字符串化运算符,它将其操作数括在引号中以使字符串文本化;因此宏扩展到
static "IMyModuleInterface" * InstanceIMyModuleInterface (void)
这是无稽之谈。摆脱流氓#
,它应该编译。