簡體   English   中英

C ++函數指針問題

[英]C++ Function pointer issues

我想發送一個函數指針作為另一個函數的參數,但我的函數拒絕接受類的成員函數作為參數。 我已經嘗試發送一個非成員函數和一個成員函數作為參數,它只在我使用非成員函數時編譯。 我需要發送一個成員函數,以便我可以訪問變量。

這是有效的函數調用:

daSocket->beginReceive(chuckTesta, fakePayload);

這是chuckTesta()的標題:

void chuckTesta(std::string *message, ssError& e, void *payload)

編譯器完全無聲......

這是函數調用,它不起作用:

daSocket->beginReceive(client::passwordAttemptCallback, fakePayload);

這是client :: passwordAttemptCallback()的標題:

void client::passwordAttemptCallback(std::string *message, ssError& e, void *payload)

編譯器說:

client2.cpp: In member function ‘void client::enterPassword()’:
client2.cpp:45: error: no matching function for call to ‘StringSocket::beginReceive(<unresolved overloaded function type>, void*&)’
../StringSocket/StringSocket.h:53: note: candidates are: void StringSocket::beginReceive(StringSocket::receiveCallback, void*)

這是StringSocket :: beginReceive()的標頭:

void beginReceive(receiveCallback callBack, void* payload);

其中receiveCallback是:

typedef boost::function<void (string *message, ssError& e, void *payload) > receiveCallback;

為什么這與非成員函數一起使用但在成員函數中失敗?

因為(非靜態)成員函數和非成員函數是完全不同的野獸。 非靜態成員函數需要額外的this參數; 它是隱式的,但boost::function對象仍然需要以某種方式傳遞它。 你能構建的是一個

boost::function<void (client*, string *message, ssError& e, void *payload)>

哪個會工作得很好。 但是,您可能真正想要的是使用Boost.Bind並構造您的boost::function如下所示:

bind(&client::passwordAttemptCallBack, &myClient, _1)

這將使&myClient傳遞給那個地方。

你不能發送成員函數指針。 獲得相同結果的一種方法是,創建一個非成員函數,獲取所有成員函數的參數以及對該類對象的引用,然后在該對象上調用該成員函數。

class A{
 void func(int a, int b){
 }
 static void nonMemberFunc(A * a, int b, int c){
   a -> func(b, c)
 }
}

現在,傳遞nonMemberFunc並將this作為指針。

暫無
暫無

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

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