簡體   English   中英

成員函數的模板和指針

[英]templates and pointers to member functions

我想使用並使用指向某些成員函數的指針,而且我還希望能夠回調該(或其他)成員函數。 可以說,我有這樣的標題:

class A{
  public:
  template<class T> void Add(bool (T::*func)(), T* member){
    ((member)->*(func))();
  }
};
class B{
  public:
  bool Bfoo(){return 1;}
  void Bfoo2(){
    A a;
    a.Add(Bfoo, this);
  }
};

和cpp像這樣:

main(){
  B f;
  f.Bfoo2();
}

我遇到以下錯誤:

main.h(22):錯誤C2784:'void __thiscall A :: Add(bool(__thiscall T :: *)(void),T *)':無法從'overloaded function'推斷'overloaded function type'的模板參數類型'

我需要從許多類中調用A :: Add(並發送有關類方法及其實例的信息),所以這就是我要使用模板的原因

使用Microsoft Visual C ++ 6.0。 我究竟做錯了什么? 我不能使用升壓。

我認為正確的方法是使用繼承,例如:

class A {
  virtual void Add() = 0;
}

class B : public A {
  void Add() {...}
}

class C : public A {
  void Add() {...}
}

因此,您主要可以執行以下操作:

A* a = new B();
a->Add(); /* this call B::Add() method */

您需要傳遞一個函數地址

a.Add(&B::Bfoo, this);

暫無
暫無

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

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