类型选择之 Conditional 和 Select
Posted lhb666aboluo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类型选择之 Conditional 和 Select相关的知识,希望对你有一定的参考价值。
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;
以上是关于类型选择之 Conditional 和 Select的主要内容,如果未能解决你的问题,请参考以下文章
spring boot 系列之六:@Conditional和spring boot的自动配置
手把手写深度学习:十大GANs之conditional GANs
手把手写深度学习:十大GANs之conditional GANs