簡體   English   中英

如何用類實例成員函數指針填充函數指針成員?

[英]How to fill a function pointer member with class instance member function pointer?

擁有一個C API,我需要創建一個C ++對象來擴展它,如下所示:

struct OldCInterface {
   void (*doStuff)();
};

struct NewCXXBaseClass : protected OldCInterface {
   virtual void doStuff(); 
   virtual ~NewCXXBaseClass();
};

如果可能,如何將指向CXX doStuff的實例指針放入構造函數的C接口中(如果我們有Base子對象的話)使其指向重載?

void (*doStuff)()如果函數指針,而&NewCXXBaseClass::doStuff類型為void (NewCXXBaseClass::*)() ,即指向成員函數的指針。 它們不兼容。 通常,它們甚至不具有相同的大小( sizeof(void (*)()) != sizeof(void (NewCXXBaseClass::*)()) )。 這樣說,以下是正確的

struct OldCInterface {
   void (NewCXXBaseClass::*doStuff)();
};

但是由於您的初衷是使用一些舊的C代碼。 這可能不起作用。 最好的辦法是制作一個靜態成員函數,以調用某個對象的虛擬成員函數。 插圖:

struct Proxy {
  static NewCXXBaseClass* s_p_;
  static void DoStuff() {
    s_p_->DoStuff();
  }
};

&Proxy::DoStuff的類型為void(*)() ,可用於需要函數指針的地方。 然后,您可以執行以下操作:

OldCInterface c_interface = {&Proxy::DoStuff};

暫無
暫無

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

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