作为宏参数的安装类型返回错误:字符串常量之前的预期非限定 id



我正在尝试做一些代码生成。

当我想用参数设置返回值的类型时,编译失败。为什么编译器返回错误?

    #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)

这是无稽之谈。摆脱流氓#,它应该编译。

最新更新