[英]Passing a function as an argument in c++
我有以下電話:
void Derived::GetEntry(Skill&);
InorderTraverse(GetEntry);
哪個電話
void Base<ItemType>::InorderTraverse(void Visit(ItemType&)) const
嘗試以書面形式編譯
錯誤C3867:'Derived :: GetEntry':函數調用缺少參數列表; 使用'&Derived :: GetEntry'創建一個指向成員的指針
使用&Derived :: GetEntry生成
無法將參數1從'void(__thiscall Derived :: *)(Skill&)'轉換為'void(__cdecl *)(ItemType&)'
將聲明更改為靜態void GetEntry ...可解決這些問題,但會產生一系列新問題(即我無法訪問非靜態對象(非靜態成員引用必須相對於特定對象)
我有一個類似的遍歷操作,可以很好地與靜態聲明一起使用,因為被調用函數僅顯示有關被調用的每個對象的信息。
我一直在尋找答案的幾天,我覺得這很簡單。 有沒有辦法在另一個函數調用中使用非靜態函數作為參數?
完整的代碼是: https : //github.com/mindaika/SkillTree
編輯:插入完整的工作示例。
我建議您改用std函數指針。
例如:
#include <functional>
void main()
{
class TheClass
{
public:
TheClass()
{
m_function = ( std::tr1::bind(&TheClass::run, this) );
};
void run()
{
// stuff to do
};
std::tr1::function<void ()> m_function;
};
TheClass theclass;
theclass.m_function();
}
m_function(); //調用函數
正如我在問題中提到的那樣,我試圖解決由於使用靜態變量而引起的“內存泄漏”(實際上不是泄漏,因為靜電被破壞了,但直到泄漏檢測器運行之后)。 我最終使用了對此處描述的封裝指針的修改: C ++釋放靜態變量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.