[英]What is the role of the {} in type_trait<T>{} when used in a template parameter?
我經常在模板化代碼中看到這個{}
出現。 我不確定我明白它在做什么。 例如:
std::enable_if_t<std::is_copy_constructible<T&>{} && !std::is_same<T, MyClass>{}>>
什么是{}
在這里? 它是否實例化了這種類型? 這意味着什么作為模板參數?
實例化類型的AFAIK意味着創建一個對象。 如何在此上下文中創建對象? 它只是創建一個虛擬對象? 為什么這樣? 這是什么意思和目的?
在此上下文中, type_trait<T>{}
等同於type_trait<T>::value
。 您的示例等效於以下內容:
std::enable_if_t<std::is_copy_constructible<T&>::value && !std::is_same<T, MyClass>::value>>
通常,使用type_trait<T>{}
而不是type_trait<T>::value
一些好處是:
type_trait_v<T>
。 在C ++ 17之前, type_trait<T>{}
就像簡潔一樣。 type_trait<T>{}
適用於標記調度。 也就是說, foo(type_trait<T>{})
可以根據type_trait<T>::value
的值調用不同的重載,因為true和false值是不同的類型。 這是因為類型特征繼承自std::integral_constant<bool, Value>
,它有一個返回值的constexpr operator bool()
。 因此, std::is_copy_constructible<T&>{}
生成類型為std::is_copy_constructible<T&>
,但由於我們在期望bool
的上下文中使用它,因此調用隱式轉換運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.