#include "iostream"
#include <functional>
#include <stdarg.h>
using namespace std;
class Root
{
private:
typedef std::function<int(int)> print_func;
print_func F_print;
public:
void setPrint(print_func fun)
{
F_print = fun;
F_print(10);
}
int pritf(int i)
{
cout << i << endl;
return 0;
}
};
#define CALLBACK_0(__selector__,__target__,...) bind(__selector__,__target__,##__VA_ARGS__)
#define CALLBACK_1(__selector__,__target__,...) bind(__selector__,__target__,std::placeholders::_1,##__VA_ARGS__)
int demo(char *msg, ...)
{
va_list argp;
int argno = 0;
int para;
va_start(argp, msg);
while (true)
{
para = va_arg(argp, int);
if (para == 0) break;
printf("Parameter #%d is : %d\n", argno, para);
argno++;
}
va_end(argp);
return 0;
}
void main()
{
Root * root = new Root();
root->setPrint(CALLBACK_1(&Root::pritf, root));
delete root;
root = nullptr;
demo("",1,2,3,4,5,6,7,8,9);
system("pause");
}