#include <iostream> using namespace std; typedef void(*FUNC)(void); void a() { cout << "This is a func ! \n"; } void b() { cout << "This is b func ! \n"; } class c { public: void operator()(void) { cout << "This is a class c!\n"; } }; template<class T> class callback { public: void operator()(T func) { func(); } }; int main () { callback<FUNC> ca; ca(a); callback<FUNC> cb; cb(b); c cc; callback<c&> Cc; Cc(cc); return 0; }