2015-03-19 40 views
13

我已經看到了這本書「有效的現代C++」的189頁這樣表達:模板參數中的「typename =」是什麼意思?

template<typename T, 
      typename = typename std::enable_if<condition>::type> 
    explicit Person(T&& n); 

我只是想知道什麼是部分「typename =」的意思。它看起來像一個模板參數的默認參數。但是你不需要在默認參數中使用「typename some_name = ...」之類的東西嗎?沒有第二個模板參數的名稱,我沒有看到在這種情況下使用的第二個模板參數。

P.S.當我在谷歌(或其他搜索引擎)的答案搜索,等號總是被丟棄,而這只是讓中找到答案几乎是不可能的......

回答

12

這是一個可選的模板參數沒有名字和默認值。
它用於應用enable_if條件;如果不滿足條件,它將創建一個編譯器錯誤。

您可以準確地使用正常方法參數相同的語法。

+1

非常感謝。我只是不知道可以有未命名的模板參數。現在一切都很有意義。 – qft 2015-03-19 03:38:42

+1

爲了澄清這句話:'它會創建一個編譯錯誤,如果條件不met':它是公平地說,這將觸發SFINAE(「替換失敗不是一種錯誤」)和構造方法中沒有定義? (我對SFINAE有點新鮮。) – kevinarpe 2016-10-03 09:03:29

相關問題