我正在尝试获取指向特定版本的指针 超载 成员功能。这是一个例子:

class C
{
  bool f(int) { ... }
  bool f(double) { ... }

  bool example()
  {
    // I want to get the "double" version.
    typedef bool (C::*MemberFunctionType)(double);
    MemberFunctionType pointer = &C::f;   // <- Visual C++ complains
  }
};

错误消息是“错误C2440:'初始化':无法从“超载功能”转换为“ MemberFunctionType'”

如果有效,则可以 f 没有超载,但在上面的示例中没有。有建议吗?

编辑

当心,上面的代码没有反映我的现实世界问题,那就是我忘记了一个“ const” - 这就是被接受的答案所指出的。不过,我会留下问题,因为我认为问题可能会发生在别人身上。

有帮助吗?

解决方案

好吧,我会回答我已经评论的内容,以便可以接受。问题与constness:

class C
{
  bool f(int) { ... }
  bool f(double) const { ... }

  bool example()
  {
    // I want to get the "double" version.
    typedef bool (C::*MemberFunctionType)(double) const; // const required!
    MemberFunctionType pointer = &C::f;
  }
};

澄清:

最初的问题不包含 const. 。我在评论中做了一个疯狂的猜测 f 作为真实代码中的const成员函数(因为在较早的迭代中,事实证明另一件事与现实世界代码缺失/不同:p)。他实际上拥有它是const成员的功能,并告诉我我应该将其作为答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top