直接用函数作为某个类的回调函数没有问题,但是用类方法作为回调函数就有问题。下面是测试代码,#include "stdafx.h"
#include <iostream.h>
#include <stdlib.h>class callback
{
typedef void (*IntF)(int);
public:
callback(IntF f = NULL) : _f(f), foo(NULL)
{
}
void run(int i)
{
if(_f) _f(i);
if(foo) foo(i);
}
private:
IntF _f;
};class foo
{
public:
void foo1(int i)
{
cout << "i = " << i << endl;
}
void foo2(int i)
{
cout << "i*i = " << i*i << endl;
}
};
void foo1(int i)
{
cout << "i = " << i << endl;
}
void foo2(int i)
{
cout << "i*i = " << i*i << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{

/*
//这样回调不可以
foo f;
callback cb1(f.foo1); // or (foo::foo1)
cb1.run(10);
callback cb2(foo::foo2); // or (foo::foo2)
cb2.run(20);
*/
callback cb3(foo1);
cb3.run(10);
callback cb4(foo2);
cb4.run(20); system("pause");
return 0;
}在BCB中可以用 __closure 解决这个问题,如把回调的声明改为
typedef void (__closure *IntF)(int);
即可,BCB中,用这种方式做事件,以便任意挂接事件处理函数。VC中,如何解决?