根据类型特征更改函数定义?

change function defination based on type trait?

我想使用 enable_if_t 更改基于类型的函数定义。类似这样的事情:

#include<type_traits>
template<typename T> struct A;

template<typename T>
struct A{
    std::enable_if_t<std::is_arithmetic<T>::value, bool>
    test()
    {
        return true;
    }
    std::enable_if_t<!std::is_arithmetic<T>::value,  bool>
    test()
    {
        return false;    
    }

};

目前it cannot compile at all

你可以试试

template <typename U = T>
std::enable_if_t<std::is_arithmetic<U>::value, bool>
test()
 { return true; }

template <typename U = T>
std::enable_if_t<!std::is_arithmetic<U>::value,  bool>
test()
 { return false; }

我的意思是...SFINAE 处理 functions/methods 的模板参数,而不是包含这些方法的 class 的模板参数。

使用 typename U = T,您将 T、class 模板参数转换为 U 方法模板参数。