问题
Usual template structs can be specialized, e.g.,
template<typename T>
struct X{};
template<>
struct X<int>{};
C++11 gave us the new cool using
syntax for expressing template typedefs:
template<typename T>
using YetAnotherVector = std::vector<T>
Is there a way to define a template specialization for these using constructs similar to specializations for struct templates? I tried the following:
template<>
using YetAnotherVector<int> = AFancyIntVector;
but it yielded a compile error. Is this possible somehow?
回答1:
No.
But you can define the alias as:
template<typename T>
using YetAnotherVector = typename std::conditional<
std::is_same<T,int>::value,
AFancyIntVector,
std::vector<T>
>::type;
Hope that helps.
回答2:
It's neither possible to specialize them explicitly nor partially. [temp.decls]/3:
Because an alias-declaration cannot declare a template-id, it is not possible to partially or explicitly specialize an alias template.
You will have to defer specializations to class templates. E.g. with conditional:
template<typename T>
using YetAnotherVector = std::conditional_t< std::is_same<T, int>{},
AFancyIntVector,
std::vector<T> >;
来源:https://stackoverflow.com/questions/26844443/using-template-specialization