[英]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.