我有一个类,它为多种输入类型重载 () 运算符,即
struct Type {
void operator()(int);
void operator()(std::string);
};
现在,我想使用 SFINAE 检查是否存在特定的 () 运算符重载,即
if (Type()(std::string) overload exists) {
// do something...
}
这在 C++11 中可行吗? (我不能使用 C++14 或 C++17)。
注意:在实际代码中,有一个模板类接受具有某些属性的类类型。该模板中有一个成员函数,它将根据参数类型的 () 运算符的某些特定重载是否存在而专门化。
最佳答案
使用 SFINAE 检查是否可以创建指向成员的指针以重载 operator()
你正在寻找。
下面是我的做法:
#include <type_traits>
template <typename A, typename B, typename = void>
struct has_overload : std::false_type {};
template <typename A, typename B>
struct has_overload<A, B, decltype((void)(void (A::*)(B))&A::operator())> : std::true_type {};
用法:has_overload<Type, std::string>::value
.
关于c++ - 如何检查 C++ 编译时是否存在运算符的特定重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57131705/