0

マクロを使用して以下のクラスを構築することは可能ですか?

struct ModelName
{
public:
    typedef std::string type;

    static type get( const GameObject* obj )
    {
        return obj->getAttribute< type >( MODEL_NAME );
    }
};

ModelNameつまり、 、MODEL_NAME、の 3 つのパラメーターを指定して、コンパイル時に上記のコードを生成したいと考えていますstd::string。それは可能ですか?

編集: 入力した後、テンプレートを使用して目的を達成できることに気付きました。なぜかうまくいかないなと思いました。ありがとう!

4

1 に答える 1

4

もちろん:

#define DEFINE_ATTRIBUTE(classname, attributeName, attributeType)   \
        struct classname                                            \
        {                                                           \
            typedef attributeType type;                             \
                                                                    \
            static type get(const GameObject* const obj)            \
            {                                                       \
                return obj->getAttribute<type>(attributeName);      \
            }                                                       \
        }

(セミコロンがないのは正常です。マクロの後にセミコロンの使用を強制/許可します。)

可能であれば、これをテンプレートとして再設計することを検討してください。

于 2013-01-03T22:51:24.027 に答える