Я пытаюсь реализовать шаблон наблюдателя (своего рода) с C ++, и я хочу использовать указатель на функцию, чтобы сделать это, но я продолжаю получать ошибку, когда пытаюсь привести указатель функции из класса B к указателю на функцию typedef :
#include <map>
typedef int (*OutputEvent)(const char*, const char*, int);
class A
{
private:
int nextListenerId;
std::map<int, OutputEvent> listenerMap;
public:
A(){ nextListenerId = 0;}
~A(){}
inline int RegisterListener(OutputEvent callback)
{
nextListenerId++;
listenerMap[nextListenerId] = callback;
return nextListenerId;
}
};
class B
{
private:
int listenerId;
public:
B(const A& a)
{
OutputEvent e = &B::CallMeBack;
listenerId = a.RegisterListener(e);
}
~B(){}
int CallMeBack(const char* x, const char* y, int z)
{
return 0;
}
};
Я создал этот пример и вставил его в codepad.org , но когда мне это не удается скомпилировать (он не компилируется ни в codepad.org, ни в Visual Studio 2010):
Output:
t.cpp: In constructor 'B::B(const A&)':
Line 28: error: cannot convert 'int (B::*)(const char*, const char*, int)' to 'int (*)(const char*, const char*, int)' in initialization
compilation terminated due to -Wfatal-errors.
Я не понимаю, почему он не может конвертировать указатели функций. Кто-нибудь может мне помочь, пожалуйста?