2013-10-22 91 views
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);         \ 
} 

我在從基類派生國家所有類的地方。我用的是狀態的字符串名字,因爲所有的狀態都存儲在一個矢量,所以我必須通過矢量投票和你要求的名稱返回狀態的功能。我想刪除用戶給每個州頒發自己名稱的必要性。相反,我希望名稱是該類的名稱。我怎樣才能做到像

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

而不是我目前在做什麼?我想最好的辦法是讓myState的類型名稱並以某種方式將其轉換成字符串。這可能嗎?

回答

1

可以使用#從宏觀的參數來創建一個字符串:

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