Появился враппер std::function. С ним вы можете использовать и функцию, и функтор. Удобно использовать с лямбдами или с std::bind.
#include <iostream>
#include <functional>
using namespace std;
class MyClass {
public:
void hello() {
cout << "Hello from " << __LINE__ << endl;
}
};
static void hello() {
cout << "Hello from " << __LINE__ << endl;
}
static void do_with_callback( std::function<void()> && callback ) {
callback();
}
int main() {
MyClass cl;
do_with_callback( std::function<void()>(hello) ); // VC 2012 fix
do_with_callback( std::bind(&MyClass::hello, &cl) );
do_with_callback( [&](){
cl.hello();
} );
return 0;
}
Вывод:
Hello from 15
Hello from 9
Hello from 9