结构体中有函数指针,怎么让函数指针指向的函数能够获取这个结构体中的其它成员变量

结构体中有函数指针,如何让函数指针指向的函数能够获取这个结构体中的其它成员变量?
如题,一下是典型的示例代码:
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);



------解决方案--------------------
探讨

引用:

定义Func的全局变量喽,这样你的自定义函数直接访问全局变量不就不需要额外传了。要么你强制一个寄存器去存你的变量值,max里再从指定寄存器里读出来?

总之都不是很灵活的做法,但函数指针么...

貌似我之前看过类似于这样的代码:
C/C++ code
window::resize(100, 300);

它是怎么知道要修改的窗口尺寸是这个……

------解决方案--------------------
lz真是执着...
还是建议去挖点历史材料看看,Bjarne老哥以前在设计C++的时候应该已经有过许多尝试和思考,虽然我没看过,不过我觉得应该会留下一些文章,lz不妨找找看。

也可以试试从编译原理的角度找找突破口。
------解决方案--------------------