class 成员 operator() 重载上的 c++ typeid
c++ typeid on class member operator() overloads
在 gcc 4.8.2 中执行以下操作时,
class A
{
public:
void operator()(int);
void operator()(const std::string&) {}
};
std::cout << typeid(&A::operator()).name() << std::endl;
它给出错误:
error: address of overloaded function with no contextual type information.
它适用于其他 class 成员运算符,例如运算符==。这是 typeid() 调用 A::operator() 中的句法错误吗?
编辑:对不起,我的错。当有多个重载的 operator() 时会出现此问题。
您可以使用 static_cast 从重载中获取您想要的内容。
static_cast
may also be used to disambiguate function overloads by performing a function-to-pointer conversion to specific type, as in std::transform(s.begin(), s.end(), s.begin(), static_cast<int(*)(int)>(std::toupper));
例如
std::cout << typeid(static_cast<void(A::*)(int)>(&A::operator())).name() << std::endl;
在 gcc 4.8.2 中执行以下操作时,
class A
{
public:
void operator()(int);
void operator()(const std::string&) {}
};
std::cout << typeid(&A::operator()).name() << std::endl;
它给出错误:
error: address of overloaded function with no contextual type information.
它适用于其他 class 成员运算符,例如运算符==。这是 typeid() 调用 A::operator() 中的句法错误吗?
编辑:对不起,我的错。当有多个重载的 operator() 时会出现此问题。
您可以使用 static_cast 从重载中获取您想要的内容。
static_cast
may also be used to disambiguate function overloads by performing a function-to-pointer conversion to specific type, as instd::transform(s.begin(), s.end(), s.begin(), static_cast<int(*)(int)>(std::toupper));
例如
std::cout << typeid(static_cast<void(A::*)(int)>(&A::operator())).name() << std::endl;