使用 enable_if 匹配数字作为函数参数
Using enable_if to match numbers as function parameter
我想使用 std::enable_if
来制作匹配数字的构造函数。我试过下面的代码,但是没有找到构造函数。主要功能有我想如何使用它的例子。我应该更改什么才能使这项工作正常进行?
#include <type_traits>
#include <string>
class A {
public:
A(const std::wstring&, const std::wstring&)
{}
template<typename T>
A(const std::wstring& n, typename std::enable_if<std::is_arithmetic<T>::value, T>::type v)
{}
};
int main() {
A(L"n", 1234); // does not compile
A(L"n", 2.7); // does not compile
A(L"n", L"n"); // compiles
return 0;
}
错误on Ideone:模板参数deduction/substitution失败
您的 T
不可推导(由于 ::type
),一种方法是:
template<typename T,
typename std::enable_if<std::is_arithmetic<T>::value>::type* = nullptr>
A(const std::wstring& n, T v)
{}
我想使用 std::enable_if
来制作匹配数字的构造函数。我试过下面的代码,但是没有找到构造函数。主要功能有我想如何使用它的例子。我应该更改什么才能使这项工作正常进行?
#include <type_traits>
#include <string>
class A {
public:
A(const std::wstring&, const std::wstring&)
{}
template<typename T>
A(const std::wstring& n, typename std::enable_if<std::is_arithmetic<T>::value, T>::type v)
{}
};
int main() {
A(L"n", 1234); // does not compile
A(L"n", 2.7); // does not compile
A(L"n", L"n"); // compiles
return 0;
}
错误on Ideone:模板参数deduction/substitution失败
您的 T
不可推导(由于 ::type
),一种方法是:
template<typename T,
typename std::enable_if<std::is_arithmetic<T>::value>::type* = nullptr>
A(const std::wstring& n, T v)
{}