获取类的名称作为字符串

时间:2013-10-22 13:36:51

标签: c++ class c-preprocessor

我有一个宏:

#define DECLARE_STATE_CLASS(T)                                            \
static void create(TGE::StateListener* Parent, const std::string name)    \
{                                                                         \
    T* myState = new T();                                                 \
    myState->parent = Parent;                                             \
    Parent->manageState(name, myState);                                   \
}

我放在从基类State派生的所有类中。我使用状态名作为字符串,因为所有状态都存储在向量中,因此我必须有一个函数来轮询向量并返回具有您请求的名称的状态。我想删除用户为每个州提供自己名称的必要性。相反,我希望该名称是该类的名称。我该怎么办

#define DECLARE_STATE_CLASS(T)                                            \
static void create(TGE::StateListener* Parent)                            \
{                                                                         \
    T* myState = new T();                                                 \
    myState->parent = Parent;                                             \
    Parent->manageState(T.toString(), myState);                           \
}
而不是我目前在做什么?我想最好的方法是获取myState的typename并以某种方式将其转换为字符串。这可能吗?

2 个答案:

答案 0 :(得分:1)

使用

Parent->manageState(#T, myState);
在你的宏中

。请参阅gcc online docs

答案 1 :(得分:1)

您可以使用#从宏的参数创建一个字符串:

#define DECLARE_STATE_CLASS(T)                                            \
static void create(TGE::StateListener* Parent)                            \
{                                                                         \
    T* myState = new T();                                                 \
    myState->parent = Parent;                                             \
    Parent->manageState( #T , myState);                                   \
}