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 に答える