在C++中,可以使用模板拥有通用容器和类型安全容器。但是,在C中,如果您想要通用容器,就必须使用void*
,这意味着您失去了类型安全性。要拥有类型安全的容器,您必须对想要保存的每种类型的数据重新实现它们。
考虑到C所遵循的是一个程序员比C++更懂得做什么的哲学,那么在C中有什么更惯用的事情:在void*
中使用通用容器,或者为每种类型的数据制作自定义容器?
发布于 2012-04-29 06:19:21
我的目标是通用容器:
void *
是指当我不在乎它的类型时,它是什么类型的。就像Java中的Object
--在那里,很长一段时间,通用容器也没有类型安全性。发布于 2012-04-29 05:58:22
因此,我快速搜索了一下,看看在C容器领域是否出现了一些新的聪明的想法。
我找到了这。这是对一个完整的C容器库的非常彻底的尝试。
它传递要包含在void *
指针中的元素。没有尝试指定特定类型的结构。
为了类型安全,您可以为每个容器编写一个“包装器”宏,该宏定义了一个主机if内联函数,该函数环绕非类型化版本并提供类型安全性。希望编译器能够对它们进行优化,但这并不总是可能的。而宏将是丑陋的。
我想这就是为什么用C++而不是C编写更多(应用程序)程序的原因之一。在C中创建复杂抽象的能力有限。您可以这样做,但通常会牺牲其他方面,比如性能或可维护性(例如,查看一个check程序)。
发布于 2012-04-29 05:39:09
要创建一个在C中处理通用数据的类型,您需要使用void*
来传递数据。为每一种可能的类型定义新的算法是不切实际的。
https://stackoverflow.com/questions/10369976
复制相似问题