簡體   English   中英

在C ++中將函數作為參數傳遞

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

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