【发布时间】:2011-05-05 11:01:38
【问题描述】:
嗨!
只是为了好玩,这两天我一直在尝试用纯 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);
看起来和工作起来都不错,但我想不出伪造实例方法的方法。我无法通过Class.function(instance),而不需要对函数名称进行全局宏替换,这违背了封装的目的。
同样,这是一个实验,只是为了挑战和乐趣 =)。你们能帮我想出一个方法来做到这一点吗?我不想使用额外的预处理,只使用普通的 C 和 GCC 宏。
edit> 忘了说——我不希望每个实例都在其结构中包含函数指针。这会给我方法语法,但这意味着一个 4 字节的数据对象将有十几个函数指针复制到每个实例。有点像作弊=P哈哈
提前致谢!
【问题讨论】:
-
这不就是他们创建cpp的原因吗? :P
-
将每个“类”与调用“成员函数”时执行的函数指针表相关联?
-
@Tobias:颤抖,我希望不会! C++: an octopus made by nailing extra legs onto a dog. - 史蒂夫泰勒:P
-
“函数名的全局宏替换”不是 C++ 名称修饰的本质吗?