结构体中有函数指针,怎么让函数指针指向的函数能够获取这个结构体中的其它成员变量
结构体中有函数指针,如何让函数指针指向的函数能够获取这个结构体中的其它成员变量?
如题,一下是典型的示例代码:
请问,用C语言的话,能实现上述的功能吗?
------解决方案--------------------
定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄存器去存你的变量值,max里再从指定寄存器里读出来?
总之都不是很灵活的做法,但函数指针么...
------解决方案--------------------
哦对了,通过一些系统调用做起来还顺当一点,什么socket啦、管道啦、共享内存啦...
------解决方案--------------------
你不传参数怎么得到具体地址呢
------解决方案--------------------
像C++非static成员函数一样:
int max(_struct * pObj)
{
}
相当于显式传递this指针
------解决方案--------------------
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
struct
{
static const int a=100, b=50;
int (*max1)();
}
Func;
int max()
/*
* 如何让这个函数不需要参数也能获得结构体中的a和b这两个变量?
**/
{
return Func.a>Func.b ? Func.a:Func.b;
}
int main()
{
Func.max1 = max;
//Func.a = 100;
//Func.b = 50;
printf("max: %d\n", Func.max1());
/*
* 以上一段代码是这样的,我想让它这样也能输出同样的结果:
* printf("max: %d\n", f.max());
* 不直接传参数给函数,能实现吗?
**/
getchar();
return 0;
}
------解决方案--------------------
如题,一下是典型的示例代码:
- C/C++ code
typedef struct { int a, b; int *(max)(int,int); } Func; int max(int a, int b) /* * 如何让这个函数不需要参数也能获得结构体中的a和b这两个变量? **/ { return a>b ? a:b; } int main() { Func f; f.max = max; f.a = 100; f.b = 50; printf("max: %d\n", f.max(f.a, f.b)); /* * 以上一段代码是这样的,我想让它这样也能输出同样的结果: * printf("max: %d\n", f.max()); * 不直接传参数给函数,能实现吗? **/ return 0; }
请问,用C语言的话,能实现上述的功能吗?
------解决方案--------------------
定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄存器去存你的变量值,max里再从指定寄存器里读出来?
总之都不是很灵活的做法,但函数指针么...
------解决方案--------------------
哦对了,通过一些系统调用做起来还顺当一点,什么socket啦、管道啦、共享内存啦...
------解决方案--------------------
你不传参数怎么得到具体地址呢
------解决方案--------------------
像C++非static成员函数一样:
int max(_struct * pObj)
{
}
相当于显式传递this指针
------解决方案--------------------
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
struct
{
static const int a=100, b=50;
int (*max1)();
}
Func;
int max()
/*
* 如何让这个函数不需要参数也能获得结构体中的a和b这两个变量?
**/
{
return Func.a>Func.b ? Func.a:Func.b;
}
int main()
{
Func.max1 = max;
//Func.a = 100;
//Func.b = 50;
printf("max: %d\n", Func.max1());
/*
* 以上一段代码是这样的,我想让它这样也能输出同样的结果:
* printf("max: %d\n", f.max());
* 不直接传参数给函数,能实现吗?
**/
getchar();
return 0;
}
------解决方案--------------------
- C/C++ code
typedef struct _Func { int a, b; int (*max)(struct _Func*); } Func, *PFunc; int max(PFunc f) /* * 如何让这个函数不需要参数也能获得结构体中的a和b这两个变量? **/ { return f->a > f->b ? f->a : f->b; } int main() { Func f; f.max = max; f.a = 100; f.b = 50; printf("max: %d\n", f.max(&f)); /* * 以上一段代码是这样的,我想让它这样也能输出同样的结果: * printf("max: %d\n", f.max()); * 不直接传参数给函数,能实现吗? **/ return 0; }
------解决方案--------------------
懂了,楼主是想用c去实现c++的类吧
------解决方案--------------------
------解决方案--------------------
如果你这里要达到c++那样的效果就应该是
struct Func
{
int a, b;
int (*max)(struct Fnc*this);
};
Func obj;
obj.max(&obj);
------解决方案--------------------
------解决方案--------------------
lz真是执着...
还是建议去挖点历史材料看看,Bjarne老哥以前在设计C++的时候应该已经有过许多尝试和思考,虽然我没看过,不过我觉得应该会留下一些文章,lz不妨找找看。
也可以试试从编译原理的角度找找突破口。
------解决方案--------------------