可能重复:
你能用C编写面向对象的代码吗?
嗨!
只是为了它的乐趣,我在最后两天一直在尝试用纯C创建一个非常简单,非常直接的对象环境.我一直在玩着宏,动态链接,类型描述结构等,我到达了以下内容:
string_o str = new(String, "hello world");
list_o list = new(List);
List.pushf(list, str);
printf("In the list: \"%s\"\n",
String.text(List.popf(list)));
delete(list);
delete(str);
Run Code Online (Sandbox Code Playgroud)
看起来和工作有点好,但我无法找到伪造实例方法的方法.我不能过去Class.function(instance),不能没有功能名称的全局宏替换,这会破坏封装的目的.
同样,这是一个实验,只是为了挑战和乐趣=).你能帮我找出办法吗?我不想使用额外的预处理,只需要使用普通的C和GCC宏.
编辑>忘了说 - 我不希望每个实例在其结构中包含函数指针.这会给我方法语法好,但这意味着一个4字节的数据对象会有十几个函数指针复制到每个实例.这有点像作弊= P哈哈
提前致谢!
最近,我一直在修补自己的语言,并阅读有关该主题的各种着作.
有没有人对C(或汇编程序)如何将概念Object Class和/或概念Generics编程成语言有任何好的建议.(指的是Object和Generics的Java实现)
例如,在Java中,所有类都扩展了Object.那么你如何在C级代表这一点呢?是这样的:
#include <stdio.h>
typedef struct {
int stuff;
} Object;
typedef struct {
int stuff;
Object object;
} ChildClass;
int main() {
ChildClass childClass;
childClass.stuff = 100;
childClass.object.stuff = 200;
printf("%d\n", childClass.stuff);
printf("%d\n", childClass.object.stuff);
}
Run Code Online (Sandbox Code Playgroud)
而且我甚至不确定如何开始实现像Generics这样的东西.我也很欣赏有关程序语言设计的任何有价值的链接.谢谢,