2013-09-24 48 views
0
template<int32_t ID= 0, class ID_TYPE = int32_t> 
    class Event { 
    public: 
     typedef ID_TYPE type; 
     typedef Event<ID, ID_TYPE> event_obj_type; 
    ..... 
} 

關於此代碼,「Event<ID, ID_TYPE>」是什麼意思? 類名與<>,我從來沒有見過這個。 有人可以啓發我嗎? 謝謝帶有<>標記的模板類名稱

+3

您已經標記用'templates'這個問題,那麼顯然你知道這是一個類模板。 「事件」只是它的名字,類似於「班級香蕉」。你的問題到底是什麼? – us2012

回答

1

事件是一個模板:在編譯時創建類似類的模式。 如果在您的代碼的某些地方製作了: 事件< 0,int32_t> A; 事件< 3,char> A;

將從該模板定義兩個類。一個用ID = 0, ID_TYPE = int32_t,另一個用ID = 3, ID_TYPE = char

[編輯] 如果您分解的第一個,你的類定義將是這樣的:

class Event 
{ 
    public: 
    typedef int32_t type; 
    typedef Event event_obj_type; 
    ..... 
} 
+0

但問題是關於typedef,當然? – doctorlove

+0

所以,classname與<>,這是什麼,術語是明智的?謝謝! – BufBills

+0

<>用於精確確定用於模板類實例的類型。它是一個C++核心語法。請參閱C++中的模板基礎知識。 –

3

你可能熟悉函數模板。這:

Event<ID, ID_TYPE> 

類模板。與函數模板實例化不同,函數本身的參數可以幫助編譯器推導出模板類型參數,對於類模板,您必須顯式傳遞模板類型(在尖括號中)。

An Idiot's Guide to C++ Templates - Part 1

相關問題