69,371
社区成员
发帖
与我相关
我的任务
分享
stack_int *intStack = generate_stack_int();
//......
freeResource :
release_int_stack(intStack);
//.....
第二个问题,你要用void*还是macro实现你的资料结构?
用void*先天上执行速度就较慢
而且一直cast来cast去的,这api也太难用了,不是type safe的,不安全也不方便
假设你使用macro产生stack_int, stack_double, stack_long等type
如果有一天我需要的是stack_image, stack_human, stack_bmp呢?
难道要我自行用你提供的macro产生stack_image,stack_human, stack_bmp吗?
这样一来的话不是很容易发生name collision,甚至是重复的代码吗?
而且使用macro还有一个问题,就是所有我不需要的api都会被编译成binary codes
这间接加剧了code bloat的问题,你要如何让这些资料结构和stl一样
跟template一样只把我需要用到的api编译成binary codes?
用c实现通用的data structures,问题还远不只是这些
不过最难的问题我想还是出在两个地方
第一 : 没有destructor == 不支援RAII
第二 : 没有template == 不支援generic programming
顶多只能用macro辅以一堆人类很难理解的奇技淫巧来模拟template的功能
这点跟c++本来就不支援metaprogramming,结果我们只能用一堆奇技淫巧来实现的道理一样