http://www.cnblogs.com/bitzhuwei/p/Write_CSharp_In_C.html#_lab2_2_0
支持(0)反对(0)
回复引用
#2楼 2013-10-08 11:57 E8software
支持(0)反对(0)
回复引用
#3楼[楼主] 2013-10-08 14:04 BIT祝威
支持(0)反对(0)
回复引用
#4楼[楼主] 2013-10-08 14:06 BIT祝威
支持(0)反对(0)
回复引用
#5楼 2013-10-08 16:42 fishkuro
支持(0)反对(0)
回复引用
#6楼[楼主] 2013-10-08 16:54 BIT祝威
|
|
|
|
|
@fishkuro 我只是用了最基本的C的内容,struct,函数指针,void*指针。仅此而已。
|
|
|
|
|
|
支持(0)反对(0)
回复引用
#7楼 2013-10-08 17:14 www378660084
支持(0)反对(0)
回复引用
#8楼 2013-10-08 19:01 FerventDesert
|
|
|
|
给大神跪了,以前我也想写这方面内容的,只可惜水平有限未能完成。。。牛
|
|
|
|
|
|
支持(0)反对(0)
回复引用
#9楼 2013-10-09 07:57 王清培
支持(0)反对(0)
回复引用
#10楼[楼主] 2013-10-09 08:49 BIT祝威
支持(0)反对(0)
回复引用
#11楼[楼主] 2013-10-09 08:50 BIT祝威
支持(0)反对(0)
回复引用
#12楼[楼主] 2013-10-09 08:51 BIT祝威
|
|
|
|
|
@www378660084 我是想弄清楚如何把C#翻译为C。直接使用libCello人人都会,如何设计编写libCello才是我感兴趣的。
|
|
|
|
|
|
支持(0)反对(0)
回复引用
#13楼 2013-10-10 10:45 Yuxi Liu
|
|
|
|
写的很好。 只是我觉得C的工程有C工程的结构,没有必要非要模仿面向对象语言的特性吧。在一个C的工程里,一般都是时间驱动。 结构非常清晰。
|
|
|
|
|
|
支持(0)反对(0)
回复引用
#14楼[楼主] 2013-10-10 14:27 BIT祝威
|
|
|
|
|
@Yuxi Liu 没错。我只是用C来说明将面向对象语言翻译为面向过程语言的方法。实际工程中是不必用这种方式写C代码的。需要的时候,直接用C++、Java、C#等等面向对象的语言就可以了。
|
|
|
|
|
|
支持(0)反对(0)
回复引用
#15楼 2013-10-21 13:33 john23.net
支持(0)反对(0)
回复引用
#16楼 2014-02-27 20:29 艾斯泽
支持(0)反对(0)
回复引用
#17楼[楼主] 2014-03-03 09:11 BIT祝威
支持(0)反对(0)
回复引用
#18楼 2014-06-10 16:39 SmartBooks
支持(0)反对(0)
回复引用
#19楼[楼主] 2014-06-10 17:09 BIT祝威
支持(0)反对(0)
回复引用
#20楼 2014-07-03 21:05 Anti-Magic
|
|
|
|
楼主厉害! 刚看到楼主这篇博客,不算挖坟吧。。 在类似Lua的脚本语言中,模拟调用类方法也是跟楼主类似的做法,但是有语法糖可以更好看一点,例如class:func(1, 2),就是把class作为func的第一个参数,另外的1和2是第二和第三个参数,所以C语言版也可以稍微改进一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include <stdio.h>
#include <stdlib.h>
//F宏模拟调用类方法,格式为F(类名,方法名,传给方法的参数)
#define F(_class, _func, ...) _func(_class, ##__VA_ARGS__)
typedef struct
{
int number;
} *MyClass; //MyClass当做类来用,隐去了指针符号
//模拟new运算符
MyClass newMyClass()
{
MyClass res = (MyClass) malloc ( sizeof (MyClass));
//初始化
res->number = 521;
return res;
}
//类方法
void myfunc(MyClass mc, char str[], int x)
{
printf ( "%d %s %d\n" , mc->number, str, x);
}
int main()
{
MyClass myclass = newMyClass();
F(myclass, myfunc, "aaa" , 2);
return 0;
}
|
这是看了楼主的博客后做的实践,没有在实战中用过,不知道说的有没有错,请多多指教。。
|
|
|
|
|
|
支持(0)反对(0)
回复引用
#21楼[楼主] 2014-07-03 22:53 BIT祝威
|
|
|
|
|
@Anti-Magic
1
|
MyClass res = (MyClass) malloc ( sizeof (MyClass));
|
这里的sizeof(MyClass)应该用错了。不过想表达的意思我明白是对的。 使用F宏有什么好处?我觉得直接使用myfunc(myclass, "aaa", 2);似乎更直观。另外我不喜欢用宏(一旦用错很难调试)
|
|
|
|
|
|
支持(0)反对(0)
回复引用
#22楼 2014-07-04 01:06 Anti-Magic
|
|
|
|
@BIT祝威 malloc确实写错了。。。谢谢指教! F宏就是单纯的模拟一下某些过程式脚本语言实现面向对象的语法糖,也就是隐去第一个参数而已,别的好处暂时没发现。。(写了宏好像变的更长了。。) 不过新标准有了inline、const、bool,宏的作用确实小了不少。 看一些开源项目总是喜欢一些丧心病狂的宏,比如 “#define end }”。 我也觉得少用应该是好的。
|
|
|
|
|
|
支持(0)反对(0)
回复引用
#23楼 2014-07-04 20:23 codingwu
支持(0)反对(0)
回复引用
#24楼[楼主] 2014-07-04 21:36 BIT祝威
时间: 2024-10-24 16:09:44