首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C中通用容器还是安全容器?

在C中通用容器还是安全容器?
EN

Stack Overflow用户
提问于 2012-04-29 05:37:28
回答 4查看 2.4K关注 0票数 10

在C++中,可以使用模板拥有通用容器和类型安全容器。但是,在C中,如果您想要通用容器,就必须使用void*,这意味着您失去了类型安全性。要拥有类型安全的容器,您必须对想要保存的每种类型的数据重新实现它们。

考虑到C所遵循的是一个程序员比C++更懂得做什么的哲学,那么在C中有什么更惯用的事情:在void*中使用通用容器,或者为每种类型的数据制作自定义容器?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-29 06:19:21

我的目标是通用容器:

  1. 一旦你习惯了它,你就会想到void *是指当我不在乎它的类型时,它是什么类型的。就像Java中的Object --在那里,很长一段时间,通用容器也没有类型安全性。
  2. 你只有一个地方可以改进。
  3. 您无法获得类型安全性;但是,由于重复实现类型安全容器,您将面临复制和粘贴错误的风险。这也会导致错误。
票数 4
EN

Stack Overflow用户

发布于 2012-04-29 05:58:22

因此,我快速搜索了一下,看看在C容器领域是否出现了一些新的聪明的想法。

我找到了。这是对一个完整的C容器库的非常彻底的尝试。

它传递要包含在void *指针中的元素。没有尝试指定特定类型的结构。

为了类型安全,您可以为每个容器编写一个“包装器”宏,该宏定义了一个主机if内联函数,该函数环绕非类型化版本并提供类型安全性。希望编译器能够对它们进行优化,但这并不总是可能的。而宏将是丑陋的。

我想这就是为什么用C++而不是C编写更多(应用程序)程序的原因之一。在C中创建复杂抽象的能力有限。您可以这样做,但通常会牺牲其他方面,比如性能或可维护性(例如,查看一个check程序)。

票数 1
EN

Stack Overflow用户

发布于 2012-04-29 05:39:09

要创建一个在C中处理通用数据的类型,您需要使用void*来传递数据。为每一种可能的类型定义新的算法是不切实际的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10369976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档