如果我想要某种类型专门用于其模板参数,我通常使用结构:
template <bool value>
struct IsTrue;
template <>
struct IsTrue<true> : std::true_type {};
template <>
struct IsTrue<false> : std::false_type {};
从继承中获取其唯一功能的空结构与using
语句实际上不同,所以我想知道,using
语句是否存在类似模板特化的内容?我在下面的内容的伪代码:
template <bool value>
using IsTrue;
template <>
using IsTrue<true> = std::true_type;
template <>
using IsTrue<false> = std::false_type;
这样的事情可能吗?会叫什么?
答案 0 :(得分:3)
不,别名模板不能部分或明确地专门化。
An earlier design确实允许专业化,但由此产生的语义相当......奇怪,至少从今天的角度来看。例如,在这样的设计中,以下程序将声明两个不同的函数模板:
template<class, class> class Meow {};
template<class T> using MeowInt = Meow<int, T>;
template<class> void f(Meow<int, T>);
template<class> void f(MeowInt<T>);
并且此调用无法编译,因为您无法推断出模板参数:
template<class T> using Purr = T;
template<class T> void f(Purr<T>);
f(42);