18

我正在尝试获取指向特定版本的重载成员函数的指针。这是示例:

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: 'initializing' : cannot convert from 'overloaded-function' to 'MemberFunctionType'”

如果f没有重载,则此方法有效,但在上面的示例中无效。有什么建议吗?

编辑

请注意,上面的代码并没有反映我的实际问题,即我忘记了一个“const”——这就是公认的答案所指出的。不过,我会保持原样,因为我认为这个问题可能发生在其他人身上。

4

1 回答 1

27

好吧,我会回答我已经发表的评论,以便可以接受。问题在于常量:

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 成员函数,并告诉我应该将其发布为答案。

于 2009-04-01T15:05:58.940 回答