簡體   English   中英

模板內部的“ class =”是什么意思?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM