2012-09-04 154 views
1

假設我有以下模板模板成員默認初始化

template <typename T> 
class{ 
    T t; 
}; 

現在,我想補充一點,與它的類型的默認值初始化噸構造。也就是說,對於數字類型,t應該用0初始化,對於指針,t應該用nullptr初始化。最後,還可能有其他類型的結構。在這裏,一個好的初始化將是默認的構造函數(無論如何都會被調用,所以我不需要在這裏做任何事情)。

在conlusion我期待這樣的事情:

template<typename T> 
class X{ 
    T t; 
    X() : t(default_value<T>::value); 
} 

正如我想象中的語法所指出的,我認爲這可能是可能以某種模板與攜帶的默認值不同的專業。但是如何處理結構和類?由於我指定了t(...),所以默認構造函數不再是一個選項。

回答

9

你可以做

X() : t() { } 

和/或在C++ 11

X() : t { } { } // see Johannes Schaub's comments about this 

這將珍惜初始化(或者是默認初始化?)t到任何默認值是對於它的類型,可以是內置的0,數組的一系列(value?default)初始化,或者使用用戶定義類型的默認構造函數。

+1

使用{}是IMO不是一個好主意,如果你想有一個特定的初始化(在這種情況下,你想要初始化值)。例如{}現在如果T是引用類型,那麼您默默地具有未定義的行爲。 –

+0

@ JohannesSchaub-litb好的,謝謝,我對此毫不知情。 –

相關問題