问一个奇怪的模板类问题,关于传入函数对象。
class hand
{
public:
int operator() ( int a )
{
cout<<a<<endl;
return 0;
}
};
template <class Handler>
class A
{
public:
A(Handler h):_h(h)
{
}
int run( int b )
{
_h(b);
return 0;
}
Handler _h;
};
这样写的,我的想法是,这样传一个函数指针进去也可以,传一个重载了括号的函数对象进去也可以。然后这样调用的:
int main()
{
A<hand> a(hand());
a.run(21);
return 0;
}
系统报错,说a是non-class type。
但是这样调用又是正确的:
int main()
{
A<hand> *a;
a = new A<hand> (hand());
a->run(21);
return 0;
}
为什么呢?
另外,这样写能够达到将hand内联进去的目的么。