2015-10-27 60 views
2

代碼描述了實現回調函數的兩個類,該函數在模板中傳遞的類參數中必須是成員函數。 下面的代碼我附加了相關的相關錯誤消息。C++中的回調函數

A.H

template <class CLASSNAME> 
class a 
{ 
public: 
    typedef void (CLASSNAME::*myFunction)(); 

    a(CLASSNAME& myObject, myFunction callback) : 
    m_myObject(myObject) 
    { 
     m_myFuntion = callback; 
    } 

    void update() 
    { 
     (m_myObject).*(m_myFuntion); 
    } 

    myFunction m_myFuntion; 
    CLASSNAME& m_myObject; 
}; 

dummy.h

#include <stdio.h> 

class dummy 
{ 
public: 
    dummy() 
    { 
     var = 14; 
    } 


    void func() 
    { 
     printf("func!!"); 
    } 

    int var; 
}; 

的main.cpp

#include <cstdlib> 
#include "a.h" 
#include "dummy.h" 


void main() 
{ 
    dummy dum; 

    a<dummy> avar(dum, &(dummy::func)); 

    avar.update(); 

    system("pause"); 
} 

我想實現的回調函數,我也得到了以下錯誤消息:

C2298 missing call to bound pointer to member function 

的問題是什麼?

+0

這可能已經在這裏找到答案:http://stackoverflow.com/questions/16778498/c-pointer-to-member-function – GreatAndPowerfulOz

回答

6

你有很多括號,他們只是不在正確的地方。調用一個指針到成員函數正確的語法是:

void update() 
{ 
    (m_myObject.*m_myFuntion)(); 
} 
2

您使用在錯誤的地方括號:

此:

a<dummy> avar(dum, &(dummy::func)); 

應該是這樣的:

a<dummy> avar(dum, &dummy::func); 

而這個:

(m_myObject).*(m_myFuntion); 

應該是:

(m_myObject.*m_myFuntion)(); 

Live Example