模板参数里面的小括号是什么意思呢?
#include "stdafx.h"
template<typename T> class functor;
template <typename FuncType> class functor_impl;
template <typename ReturnType, typename Arg1_Type>
class functor_impl<ReturnType(Arg1_Type)>
{
public:
virtual ~functor_impl() {}
virtual ReturnType operator()(Arg1_Type a) =0;
};
template<typename FuncType, typename Fun> class functor_handler;
template<typename ReturnType, typename Arg1_Type, typename Fun>
class functor_handler<ReturnType (Arg1_Type), Fun>
: public functor_impl<ReturnType (Arg1_Type)>
{
public:
functor_handler()
{}
functor_handler(const Fun& f):m_f(f)
{}
ReturnType operator()(Arg1_Type a)
{
return m_f(a);
}
void operator=(Fun f)
{
m_f = f;
}
private:
Fun m_f;
};
template <typename R, typename X>
class functor<R>
{
public:
typedef R ReturnType;
typedef X Arg1_Type;
typedef functor<ReturnType (Arg1_Type)> ProtypeFun;
functor():ptr_f(NULL)
{}
~functor(){delete ptr_f;}
template <class Fun>
ProtypeFun& operator= (Fun f)
{
if(ptr_f) delete ptr_f;
ptr_f = new functor_handler<ReturnType (Arg1_Type), Fun>(f);
return *this;
}
ReturnType operator()(Arg1_Type a)
{
return (*ptr_f)(a);
}
private:
functor_impl<ReturnType (Arg1_Type)>* ptr_f;
};
void test(int a)
{
printf("hehe\n");
}
struct test2{
void operator()(int a)
{
printf("haha\n");
}
};
int _tmain(int argc, _TCHAR* argv[])
{
functor<void (int)> fun;
fun = test;
fun(55);
test2 a;
fun = a;
fun(66);
return 0;
}