c语言来实现c++
来源:互联网 发布:印度阅兵知乎 编辑:程序博客网 时间:2024/05/03 11:57
闲来没事,看了看sqlite的源码,突然想用c实现c++,写了如下demo,自我感觉不错
#include <stdio.h>#include <stdlib.h>struct Class;typedef struct Class _Class;struct IMethod{void (*ctor)(_Class *c);void (*dtor)(_Class *c);int (*sum)(_Class* c);int (*getValueA)(_Class* c);int (*getValueB)(_Class* c);void (*setValueA)(_Class*c, int a);void (*setValueB)(_Class *c, int b);};typedef struct IMethod _IMethod;typedef struct Class{//数据int m_a;int m_b;//接口_IMethod m_method;} _Class;int _sum(_Class *c){return c->m_a+c->m_b;}int _getValueA(_Class *c){return c->m_a;}int _getValueB(_Class *c){return c->m_b;}void _setValueA(_Class *c, int a){c->m_a = a;}void _setValueB(_Class *c, int b){c->m_b = b;}void _ctor(_Class *c){printf("create new _Class\n");//初始化数据,构造函数c->m_method.sum = &_sum;c->m_method.getValueA = &_getValueA;c->m_method.getValueB = &_getValueB;c->m_method.setValueA = &_setValueA;c->m_method.setValueB = &_setValueB;c->m_a = 0;c->m_b = 0;}void _dtor(_Class *c){printf("delete _Class\n");//析构函数}//_Class的对象工厂_Class *newClass(){_Class* obj= (_Class*)malloc(sizeof(_Class));_ctor(obj);return obj;}void deleteClass(_Class * c){_dtor(c);free(c);}#define CXX_CALLER(obj, fun,...)\obj->m_method.fun(obj, __VA_ARGS__);\int main(int argc, char *argv[]){_Class *c = newClass();int a=0, b=0, sum=0;CXX_CALLER(c, setValueA, 100);CXX_CALLER(c, setValueB, 200);// c->m_method.setValueA(100);// c->m_method.setValueB(200);// a = c->m_method.getValueA(c);// b = c->m_method.getValueB(c);// sum = c->m_method.sum(c);a = CXX_CALLER(c, getValueA);b = CXX_CALLER(c, getValueB);sum = CXX_CALLER(c, sum);printf("a=%d, b=%d, sum=%d\n", a, b, sum);deleteClass(c);getchar();return 0;}
4 0
- c语言来实现c++
- 用c语言来实现井字棋
- 使用栈来实现符号平衡----c语言实现
- 如何使用标准c语言来实现图像验证码
- [C语言]利用stdarg.h来实现可变参数列表
- F2812中用C语言来实现中断的说明
- 用telnet来发邮件并用C语言实现
- C语言学习:通过数组来实现栈
- 链表的实现(C语言)__一步一步来
- C语言实现使用静态数组来构造栈结构
- C语言实现使用动态数组来构造栈结构
- 使用C语言的struct来实现C++的class
- Linux下用C语言来实现简单的进度条
- (闲来无事)C语言的链表实现
- C语言实现按分隔符来截取字符串
- 二级C语言来了
- 链栈 C语言实现
- 地球 c语言实现
- BAT的云
- ThermalLabel SDK条码组件下载及介绍
- Xcode 笔记之 frame
- ubuntu下JLink的配置步骤和Can not connect to J-Link via USB的解决
- Windows Phone 7开发学习(4):Style样式的四种使用
- c语言来实现c++
- 深入Python(1): 字典排序 关于sort()、reversed()、sorted()、cmp()等
- poj 1308 Is It A Tree? 并查集,有向树的判断
- 逆波兰表达式解数学运算(c#)
- 【C++系列15】c++的正无穷和负无穷
- Spring MVC防御CSRF和XSS
- sybase ASE 如果通过page定位表和索引
- java Iterator 和 ListIterator 的不同使用方法
- Excel或Access,每条记录生成一份格式化的 word 文档