你能专门使用陈述吗?

时间:2015-05-28 05:37:15

标签: c++

如果我想要某种类型专门用于其模板参数,我通常使用结构:

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;

这样的事情可能吗?会叫什么?

1 个答案:

答案 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);