2010-01-26 153 views
16

建議我有一個模板功能類似以下內容:如何正確初始化模板類型的成員變量?

template<class T> 
void doSomething() 
{ 
    T a; // a is correctly initialized if T is a class with a default constructor 
    ... 
}; 

但是變量初始化離開,如果T是一個基本類型。我可以寫T a(0),但如果T是一個類,這不起作用。有兩種方法來初始化變量(T ==類,T == int,char,bool,...)嗎?

+0

編輯問題絲毫不差,以避免含糊如果模板的模板變量或構件是指。有一些與前者相關的模板魔術。 – Swift 2017-08-23 06:59:34

回答

28

像這樣:

T a{}; 

預C++ 11,這是最簡單的近似:

T a = T(); 

但是,它需要T可拷貝(雖然副本是一定要去被消除)。在C++ 11

+2

剛剛注意到,類似'int i = bool()'的確能工作......爲什麼這是合法的?!...在這種情況下是'bool()'某種功能? – smerlin 2010-01-27 00:30:04

+0

btw,'unsigned int i = unsigned int();'不用GCC編譯,但是合法嗎? – smerlin 2010-01-27 00:35:27

+0

@smerlin:我已經回答了你的第一個問題,並正式提出你的第二個問題:http://stackoverflow.com/questions/2144012/explicit-type-conversion-and-multiple-simple-type-specifiers;我相信答案是這對於由簡單類型說明符組合指定的類型無效,例如, 'unsigned int'。 – 2010-01-27 01:42:48

0

類模板字段具有相同的語法:

template <class T> 
class A { 
    public: 
    A() {} 
    A(T v) : val(v) {} 
    private: 
    T val{}; 
};