在C ++ 14中,假设我有一组N
互相排斥的bool constexpr变量模板的一个类型模板参数:
template<typename T> constexpr bool P1 = ...;
template<typename T> constexpr bool P2 = ...;
.
.
.
template<typename T> constexpr bool PN = ...;
通过互斥,我们的意思是对于任意两个不同的整数i
和j
(在[1..N]
中)和任何类型T,Pi<T> && Pj<T>
都是假的。
我想定义一个参数的重载函数集,由N
函数定义组成,这样一个带有类型T参数的函数调用表达式将选择ith
函数{{1如果没有这样的Pi<T>
:
Pi
实现这个的最简单方法是什么?
答案 0 :(得分:6)
您可以使用SFINAE:
template <typename T>
std::enable_if_t<P1<T>>
f(const T&t) { defn1(); }
template <typename T>
std::enable_if_t<P2<T>>
f(const T&t) { defn2(); }
// ...
要求是,对于T
类型,只有一个Pi<T>
为true
。