#include <iostream>
#include <functional>
#define CREATE_FUN(_TYPE_)\
static _TYPE_* create() \
{ \
_TYPE_ *pRet = new _TYPE_();\
pRet->init();\
return pRet;\
}
class A
{
public:
A(){}
virtual ~A(){}
bool init();
CREATE_FUN(A);
void show();
};
bool A::init()
{
std::cout<< "init() is called!!!" <<std::endl;
}
void A::show()
{
std::cout<< "2show() is called!!!" <<std::endl;
}
void gzh(std::function<A*()> f)
{
f()->show();
}
void sum(int a, int b)
{
std::cout<< a+b <<std::endl;
}
int main()
{
A *a = A::create();
a->show();
std::function<void(int,int)> Sum;
Sum = sum;
Sum(1,2);
typedef void(*Func)(int, int);
Func f = sum;
f(4,5);
gzh([](){return new A();});
return 0;
}