类成员operator()上的c ++ typeid重载

时间:2016-10-24 03:35:13

标签: c++ overloading member-function-pointers typeid typeinfo

在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.

它适用于其他类成员运算符,例如operator ==。这是A :: operator()的typeid()调用中的语法错误吗?

编辑:抱歉,我的不好。当存在多个重载的operator()时,会出现问题。

1 个答案:

答案 0 :(得分:2)

您可以使用static_cast从过载中获取您想要的内容。

  

for也可用于通过执行到特定类型的函数到指针转换来消除函数重载的歧义,如static_cast

e.g。

std::transform(s.begin(), s.end(), s.begin(), static_cast<int(*)(int)>(std::toupper));

LIVE