C++ std::enable_if 代码示例

std::enable_if 在C++ 14中的定义为:

template< bool B, class T = void >
using enable_if_t = typename enable_if::type;

对应的执行内容为以下二者之一:

template
struct enable_if {}; //此时B为false
 
template
struct enable_if { typedef T type; }; //此时B为true

代码示例:

#include 
#include 
 
// foo1 overloads are enabled via the return type
template
typename std::enable_if::value, T>::type 
    foo1(T t) 
{
    std::cout << "foo1: float\n";
    return t;
}
 
template
std::enable_if_t::value, T> //Using helper type
    foo1(T t) 
{
    std::cout << "foo1: int\n";
    return t;
}
 
// foo2 overload is enabled via a parameter
template
T foo2(T t, typename std::enable_if::value >::type* = 0) 
{
    return t;
}
 
// foo3 overload is enabled via a template parameter
template::value>::type* = nullptr >
T foo3(T t) // note, function signature is unmodified
{
    return t;
}
 
// A is enabled via a template parameter
template
class A; // undefined
 
template
class A::value >::type> {
}; // note: for this use case, static_assert may be more appropriate
 
int main()
{
    foo1(1.2); // OK, calls the first version of foo1()
    foo1(10); // OK, calls the second version of foo1()
 
//  foo2(0.1); // compile-time error
    foo2(7); // OK
 
//  foo3(1.2); // compile-time error
    foo3(34); // OK
 
//  A a1; // compile-time error
    A a1; // OK
}

输出为:

foo1: float
foo1: int

你可能感兴趣的:(C++ std::enable_if 代码示例)