麻烦 cunsh(村少)老大再帮忙看看,关于函数指针和重载了() 的对象,还是有点不解,该如何解决

麻烦 cunsh(村少)老大再帮忙看看,关于函数指针和重载了() 的对象,还是有点不解
http://community.****.net/Expert/topic/5667/5667807.xml?temp=.6560938

我是这么想的,pfun(a);   ,pfun   是函数指针。
假设是   fun   ,那   pfun(a)   ==>   fun(a)
假设是对象   obj,那   pfun(a)   ==>   obj(a)
正好   obj   对象重载了   ()   ,符合这要求。(下面代码我用的是匿名对象,出错,为什么?)


#include   <iostream>
using   namespace   std;


void   fun(int   a)
{
cout < < "pfun():   " < <a < <endl;
}

class   AA
{
public:
void   operator()(int   a)
{
cout < < "operator():   " < <a < <endl;
}
};

void   show(void   (*pfun)(int   ),int   a)
{
pfun(a);
}

int   main()
{
void   (*pfun)(int   a);
pfun=fun;
show(pfun,3);
show(AA(),5);
return   0;
}

------解决方案--------------------
void show(void (*pfun)(int ),int a)
{
pfun(a);
}

函数对象可以隐式地转成函数指针??

------解决方案--------------------
像你的show函数. 要是不知道给它传递的是函数指针还是函数对象的话. 用模板. 编译的时候就会推出参数的类型.

template <class FUN>
void show(FUN pf,int a)
{
pf(a);
}