簡體   English   中英

C++11 中的部分專業化和常量難題

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

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