我有以下電話:傳遞函數在C++的說法
void Derived::GetEntry(Skill&);
InorderTraverse(GetEntry);
其中要求
void Base<ItemType>::InorderTraverse(void Visit(ItemType&)) const
試圖編譯書面生成
錯誤C3867:「派生:: GetEntry':函數調用缺少的參數列表;使用 '&派生:: GetEntry' 來創建一個指針構件
使用&派生:: GetEntry生成
不能從「無效轉換參數1(__thiscall派生:: *)(技巧& )」到‘無效(__cdecl *)(ItemType的&)’
更改聲明靜態無效GetEntry ......解決這些問題,但也帶來了新的問題(即我不能交流(非靜態成員引用必須是相對於特定對象)
我有一個類似的遍歷操作,可以很好地處理靜態聲明,因爲被調用的函數只是顯示關於它被調用的每個對象的信息。
我一直在尋找幾天的答案,我覺得這很簡單。有沒有辦法在另一個函數調用中使用非靜態函數作爲參數?
完整的代碼是:https://github.com/mindaika/SkillTree
重複http://stackoverflow.com/questions/400257/how-can-i-pass-a-class-member-function-as-a回調 –
沒有看到實際的代碼使得它在理解這個問題上有些問題(至少對我而言)。第一個片段甚至不是有效的C++代碼,因爲第一行是*聲明*,第二個是實際的函數調用。什麼是*實際*問題?你是否試圖將一個指向成員的函數傳遞給另一個用於枚舉算法的函數?來自Zac的相關問題涵蓋了這一點。 – WhozCraig
如果您確切知道您將傳遞哪些函數,並且可以從希望調用它們的上下文訪問這些函數,則可以將該函數傳遞給枚舉,然後在呼叫站點進行切換。當然,這並不靈活。 – didierc