2013-12-22 134 views
10

我明白他們編碼有關您實例化它們的類型的信息,但是它們是如何工作的?舉例來說,類型特徵std::is_class。它的工作如何?所有的實現看起來都是空洞的結構,我必須承認我在撓頭。C++類型特徵

這些名稱看起來足夠描述性,所以我可以理解它們的含義,但什麼是使用類型特徵的典型場景?

我找不到關於這個問題的介紹性資源(或關於SO的問題)。指針將不勝感激。

+0

它們可以由編譯器實現(即使它們看起來像普通的類模板定義)。然而,我認爲'is_class'的一個可能的實現在Alexandrescu的「現代C++設計」中有所描述 –

+1

相關:http://stackoverflow.com/q/20181702/420683 – dyp

回答

6

某些類型特徵,如std::is_class只是使用編譯器內在函數(aka內置函數)。如果沒有編譯器的特別支持,你不能自己編寫它們。

類型特徵在泛型上下文中非常有用 - 您可能希望基於類型的屬性專門化事物,或者對模板參數施加限制。例如,當迭代器是指向POD的指針時,std::copy的實現可以在內部使用std::memcpy而不是顯式循環。這可以通過SFINAE來實現。