易截截图软件、单文件、免安装、纯绿色、仅160KB

C的结构体模拟C++类,如何实现this指针问题?

比如结构体

C/C++ code:

typedef struct {
int a;
void (*set_a)(int val);
} test_t;

void my_set_a(int val)
{
/* 哪里能得到这个指向不同实例的this指针? */
this->a = val;
}

void main(void)
{
test_t test;

test.set_a = my_set_a;

test.set_a(1);
}




想了半天也想不出来, 在C中该怎么搞定这个问题, 不知道各位有没有什么高招?

C/C++ code:
typedef struct _test_t{
int a;
void (*set_a)(_test_t*, int val);
} test_t;

void my_set_a(test_t* this, int val)
{
this->a = val;
}

void main(void)
{
test_t test;

test.set_a = my_set_a;

test.set_a(&test, 1);
}



那应该是编译器的事。语法上面不好实现吧。。。
参考侯杰《深入C++ object对象模型》

用c实现oo的一小段代码

C/C++ code:

#include <stdio.h>

typedef struct
{
void *p;
int ma;
void (*vshow)(void *this);
} A;

typedef struct
{
A parent;
void *p;
int mb;
char name[2];
} B;


typedef struct
{
void (*set_ma)(void *this, int a);
} AC;

typedef struct
{


相关问答:

C 程序问题 (二) - C/C++ / C语言

问一下:
#include <stdio.h>
int main()
{
  char x, y, z;
  int i;
  int a[16];
  for(i=0; i<=16; i++)
  {
  a[i] = 0;
  ......

c#控制Mysql 实现自动删除功能 - .NET技术 / C#

有个winform程序,使用c#+mysql,需要在一个窗体设置mysql自动删除功能,包括自动删除多少天之前的数据以及是否开启自动删除功能,我程序退出后,还怎么控制Mysql自己删除啊?是不是要用mysql的event来实现?c#可以调用mysq ......

C 程序问题 (三) - C/C++ / C语言

问题一:
在对齐为4的情况下
struct BBB
{
long num;
char *name;
short int data;
char ha;
short ba[5];
}*p;
p=0x1000000;
p+0x200=____;
(Ulong)p+0x200=____;
(char*)p+0x200=____;
假设在32位C ......

刚学C,用C实现编码 - C/C++ / C语言

#include"stdio.h"
#include"stdlib.h"
void ContrTwo(char i)
{
char str1[8];
itoa(i,str1,2);
printf("%s",str1);
}
unsigned char leftRot(char str,int i);
unsign ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号