【发布时间】:2017-11-16 23:19:45
【问题描述】:
我们有一个名为std::conditional 描述here 的元编程小奇迹。在同一个参考资料中,它说可能的实现是
template<bool B, class T, class F>
struct conditional { typedef T type; };
template<class T, class F>
struct conditional<false, T, F> { typedef F type; };
所以如果我在代码中做类似的事情
typename std::conditional<true,int,double>::type a;
编译器将遵循第一个定义,如果我做类似的事情
typename std::conditional<false,int,double>::type b
编译器将采用第二个。为什么这行得通?这里有什么编译规则?
【问题讨论】:
-
现有规则是部分模板特化。
标签: c++ c++11 templates template-meta-programming template-specialization