温馨提示×

c++ enable_if的使用技巧有哪些

c++
小樊
84
2024-07-12 09:41:28
栏目: 编程语言

  1. 使用enable_if来限制模板函数的特化
template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
foo(T t) {
    return t * 2;
}

template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type
foo(T t) {
    return t * 3.14;
}
  1. 使用enable_if来限制模板类的特化
template <typename T, typename = std::enable_if_t<std::is_integral<T>::value>>
class MyClass {
    // class implementation
};

template <typename T, typename = std::enable_if_t<std::is_floating_point<T>::value>>
class MyClass {
    // class implementation
};
  1. 使用enable_if来选择模板函数的返回类型
template <typename T>
std::enable_if_t<std::is_integral<T>::value, T>
foo(T t) {
    return t * 2;
}

template <typename T>
std::enable_if_t<std::is_floating_point<T>::value, T>
foo(T t) {
    return t * 3.14;
}
  1. 使用enable_if来限制模板函数的参数类型
template <typename T, typename U, 
    typename = std::enable_if_t<std::is_integral<T>::value && std::is_integral<U>::value>>
void bar(T t, U u) {
    // function implementation
}

template <typename T, typename U, 
    typename = std::enable_if_t<std::is_floating_point<T>::value && std::is_floating_point<U>::value>>
void bar(T t, U u) {
    // function implementation
}

0