10
我明白他們編碼有關您實例化它們的類型的信息,但是它們是如何工作的?舉例來說,類型特徵std::is_class
。它的工作如何?所有的實現看起來都是空洞的結構,我必須承認我在撓頭。C++類型特徵
這些名稱看起來足夠描述性,所以我可以理解它們的含義,但什麼是使用類型特徵的典型場景?
我找不到關於這個問題的介紹性資源(或關於SO的問題)。指針將不勝感激。
我明白他們編碼有關您實例化它們的類型的信息,但是它們是如何工作的?舉例來說,類型特徵std::is_class
。它的工作如何?所有的實現看起來都是空洞的結構,我必須承認我在撓頭。C++類型特徵
這些名稱看起來足夠描述性,所以我可以理解它們的含義,但什麼是使用類型特徵的典型場景?
我找不到關於這個問題的介紹性資源(或關於SO的問題)。指針將不勝感激。
某些類型特徵,如std::is_class
只是使用編譯器內在函數(aka內置函數)。如果沒有編譯器的特別支持,你不能自己編寫它們。
類型特徵在泛型上下文中非常有用 - 您可能希望基於類型的屬性專門化事物,或者對模板參數施加限制。例如,當迭代器是指向POD的指針時,std::copy
的實現可以在內部使用std::memcpy
而不是顯式循環。這可以通過SFINAE來實現。
它們可以由編譯器實現(即使它們看起來像普通的類模板定義)。然而,我認爲'is_class'的一個可能的實現在Alexandrescu的「現代C++設計」中有所描述 –
相關:http://stackoverflow.com/q/20181702/420683 – dyp