簡體   English   中英

如何獲取重載成員function的地址?

[英]How to get the address of an overloaded member function?

我正在嘗試獲取指向特定版本的重載成員 function 的指針。 這是示例:

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”——這就是公認的答案所指出的。 不過,我會保持原樣,因為我認為這個問題可能發生在其他人身上。

好吧,我會回答我已經發表的評論,以便可以接受。 問題在於常量:

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 成員 function(因為在更早的迭代中,結果發現還有另一件事缺失/與實際代碼不同:p)。 他實際上是一個 const 成員 function,並告訴我應該將其發布為答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM