以字符串形式获取类的名称

Get the name of a class as a string

本文关键字:获取 字符串      更新时间:2023-10-16

我有一个宏:

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

使用

Parent->manageState(#T, myState);

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

您可以使用

#从宏的参数创建字符串:

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