0

我有一个宏:

#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 的类型名并以某种方式将其转换为字符串。这可能吗?

4

2 回答 2

1

利用

Parent->manageState(#T, myState);

在你的宏中。请参阅gcc 在线文档

于 2013-10-22T13:44:22.847 回答
1

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

#define DECLARE_STATE_CLASS(T)                                            \
static void create(TGE::StateListener* Parent)                            \
{                                                                         \
    T* myState = new T();                                                 \
    myState->parent = Parent;                                             \
    Parent->manageState( #T , myState);                                   \
}
于 2013-10-22T13:44:27.100 回答