1

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

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

    #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 *或任何其他预定义类型时,代码编译不会出错。

我究竟做错了什么?

4

1 回答 1

2

在宏定义中,#是字符串化运算符,它将其操作数括在引号中以生成字符串文字;所以宏扩展为

static "IMyModuleInterface" * InstanceIMyModuleInterface (void)

这是胡说八道。摆脱流氓#,它应该编译。

于 2013-11-11T16:36:24.303 回答