读书人

麻烦 cunsh(村少)老大再帮忙看看关于

发布时间: 2012-02-04 15:43:08 作者: rapoo

麻烦 cunsh(村少)老大再帮忙看看,关于函数指针和重载了() 的对象,还是有点不解
http://community.csdn.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);
}

读书人网 >C++

热点推荐