关于函数指针做形参的问题

crysword 2007-09-06 11:32:29
int a(int x,int y)
{
return (x>y)?x:y;
}

int b(int x,int y,int (*z)(int,int))
{
return z(x,y);
}
使用的使用用b(1,2,&a)是可行的,但是当a属于1个类的私有变量而在该类中使用b(1,2,&a)就会报错
error C2276: '&' : illegal operation on bound member function expression
而函数a中要使用该类中另外的私有变量,并不能将其移动到类外。
请问该怎么解决?
...全文
767 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_anthony 2007-09-07
  • 打赏
  • 举报
回复
LZ题目问的就有问题,既然要调用类的成员函数,怎么又不指明是哪个对象?
如果根本就不需要指明是哪个对象,那么就设为static的成员函数好了。

如果需要指明哪个对象,势必需要改动当前的设计,如果a、b的函数形式都不能变动的话,
声明一个static int classtype::s_a(int x,int y);
当前需要调用的是哪个对象,你必须要通过x或者y这个参数告知classtype::s_a,可以使用struct的指针形式作参数,比如定义一个
struct xxx
{
int x;
classtype* p;
} xx;
然后这样调用:
xx.x = 1;
xx.p = 要访问的对象指针;
b((int)&xx,2,classtype::s_a);
而s_a可以这样写:
static int classtype::s_a(int x,int y)
{
struct xxx *pxx = (struct xxx *)x; //警告无视
pxx->p->a(pxx->x,y); //a就是你原先要处理的回调函数
}



Torch009 2007-09-07
  • 打赏
  • 举报
回复
满天星
lyg_zy 2007-09-06
  • 打赏
  • 举报
回复
假如你的类为CClass1;
最简单的解决办法:
在类中声明函数为
Static int a(int x,int y,CClass1 *pThis)
int a(int x,int y,CClass1 *pThis)
{
.....
return (x>y)?x:y;
}

int b(int x,int y,int (*z)(int,int,CClass1 *pThis ))
{
return z(x,y);
}

就可以了。
dyw 2007-09-06
  • 打赏
  • 举报
回复
没有必要,直接调用之。
ouyh12345 2007-09-06
  • 打赏
  • 举报
回复
用thunk技术,使用成员函数做回调
  • 打赏
  • 举报
回复
因为类成员函数(非静态)都有一个隐藏的this指针。
用模板吧
class teset
{
int a(int x,int y)
{
return (x>y)?x:y;
}
};
template<class T>
int b(int x,int y,T func)
{
return func(x,y);
}
int main()
{
test x;
b(1,2,bind1st(mem_fun(&test::a),&x) );
}
dyw 2007-09-06
  • 打赏
  • 举报
回复
float (SomeClass::*my_memfunc_ptr)(int, char *);
// For const member functions, it's declared like this:
float (SomeClass::*my_const_memfunc_ptr)(int, char *) const;

http://www.codeproject.com/cpp/FastDelegate.asp
ouyh12345 2007-09-06
  • 打赏
  • 举报
回复
楼上的方法不现实。
b在使用回调函数a的时候,很难得到CClass1的对象

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧