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
{
相关问答:
问一下:
#include <stdio.h>
int main()
{
char x, y, z;
int i;
int a[16];
for(i=0; i<=16; i++)
{
a[i] = 0;
......
有个winform程序,使用c#+mysql,需要在一个窗体设置mysql自动删除功能,包括自动删除多少天之前的数据以及是否开启自动删除功能,我程序退出后,还怎么控制Mysql自己删除啊?是不是要用mysql的event来实现?c#可以调用mysq ......
问题一:
在对齐为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 ......
#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 ......