使用宏在编译时生成一个类

时间:2013-01-03 22:46:42

标签: c++ macros

是否可以使用宏构建下面的类?

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

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

换句话说,我想在编译时根据以下三个参数生成上述代码:ModelNameMODEL_NAMEstd::string。这可能吗?

编辑:输入后,我意识到我可以使用模板实现我想要的功能。出于某种原因,我认为它不会起作用。谢谢!

1 个答案:

答案 0 :(得分:4)

不确定

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

(丢失的分号是正常的;它强制/允许在宏之后使用分号。)

如果可能,您可以考虑将其重新设计为模板。