[英]Partial specialization and const conundrum in C++11
一個 class 模板:
template <class X, class Y > class MyTemplate;
我想部分專門化這個 class 以便當 X 是 const 類型時,Y 是int
並且如果我創建 object 則選擇部分專門化代碼,例如:
MyTemplate<sometype const> var;
而如果 X 是非常量類型,則 Y 是double
精度類型,並且如果我創建 object 則選擇部分專業化代碼,例如:
MyTemplate<sometype> var;
這在 C++11 中是否可行? 如果是這樣,怎么做? 如果不是,這在 C++20 中是否有可能的概念和要求?
部分專業化(可能有促成因素):
template <class X, class Y, typename Enabler = void> class MyTemplate;
template <class X>
class MyTemplate<const X, int>
{
// ...
};
template <class X>
class MyTemplate<X, double, std::enable_if_t<!std::is_const_v<X>>>
{
// ...
};
//...
將 C++14 X_t<T>
/ X_v<T>
替換為類型名typename X<T>::type
/ X<T>::value
為 C++11。
您實際上不需要為此使用部分專業化。 你可以寫:
template <typename X,
typename Y =
typename std::conditional<std::is_const<X>::value, int, double>::type>
class MyTemplate;
這是一個演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.