[英]What does `class =` inside template mean?
我在C代碼中找到了這個構造:
template<typename T, class = decltype(std::declval<T>() < std::declval<T>())>
struct check : std::true_type {};
現在,我了解了它的作用,但我不了解它的作用。 如果類型T
不支持<
-operator,則拋出編譯錯誤。 但是,顯然,當將class
更改為其他內容時,整個內容將無法編譯並引發語法錯誤。
class = sometypename
是什么意思?
class
是一樣的typename
這里。 您也可以這樣做:
template<typename T, typename = decltype(std::declval<T>() < std::declval<T>())>
struct check : std::true_type {};
您可以為模板參數指定默認值。 例如
template<typename X = int> struct test { };
如果不使用模板參數,也可以省略它們的名稱:
template<typename = int> struct test { };
因此,在您的示例中,第二個模板參數只是帶有默認參數的未命名參數。
使這個工作稱為SFINAE概念(取代失敗不是錯誤)和用於實現std::enable_if<>
等http://en.cppreference.com/w/cpp/language/sfinae
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.