标签:lse code unsigned 实现 别名 type return struct nbsp
Conditional:在两种类型中进行选择的方法。 Select:在多种类型中进行选择的方法。 区别: ?: 是在多个值中进行选择。而Conditional和Select是用来选择类型的。 关于conditional: conditional模板是标准库的一部分(定义在<type_traits>中)。 其实现为: template<bool C, typename T, typename F> //通用模板 struct conditional{ using type = T; }; template<typename T, typename F> //false的特例化版本 struct conditional<false,T,F>{ using type = F; }; 例如: typename std::conditional<(std::is_polymorphic<T>::value),X,Y>::type z; 为了改进语法,可以也引入一个别名: template<bool B, typename T, typename F> using Conditional = typename std::conditional<B,T,F>::type; 同时添加一个函数: template<typename T> constexpr bool Is_polymorphic() { return std::is_polymorphic<T>::value; } 基于上面的定义,可以改写此代码为: Conditional<(Is_polymorphic<T>()),X,Y> z; 关于select: template<unsigned N, typename... Cases> //一般情况;不会被实例化 struct select; template<unsigned N, typename T, typename... Cases> struct select<N,T,Cases...> :select<N-1,Cases...>{ }; template<typename T, typename... Cases> //最终情况:N==0 struct select<0,T,Cases...>{ using type = T; }; template<unsigned N, typename... Cases> using Select = typename select<N,Cases...>::type;
标签:lse code unsigned 实现 别名 type return struct nbsp
原文地址:https://www.cnblogs.com/lhb666aboluo/p/13212990.html