1
13
我会说使用
从中获取尽可能多的提示 glib 尽可能地,我发现它们的数据结构非常好并且易于使用,并且由于类型安全性的丧失,几乎没有什么麻烦。 |
2
6
我想你必须在两者之间取得平衡,正如你所建议的。如果代码只有几行,而且很琐碎,我会复制它,但是如果它更复杂,我会考虑使用
如果您查看C运行时库,有几个“通用”函数可以使用
|
3
4
使用空指针没有任何问题。在将它们分配给指针类型的变量时,甚至不需要强制转换它们,因为转换是在内部完成的。值得一看的是: http://www.cpax.org.uk/prg/writings/casting.php |
4
3
这个问题的答案与在C++中获取链表的有效模板一样。 a)创建使用void*或某种抽象类型的算法的抽象版本 b)创建一个轻量级的公共接口来调用抽象类型算法,并在它们之间进行强制转换。 例如。
等 |
5
2
我们在C中经常使用OO,但只用于封装和抽象,没有多态性。 这意味着我们有特定的类型,比如foobar(foo a,…),但是对于我们的集合“类”,我们使用void*。只需在可以使用多个类型的地方使用void*,但是这样做可以确保您不需要参数是特定类型的。根据集合,使用void*是可以的,因为集合不关心类型。但是,如果您的函数可以接受类型A和类型B,但是不能接受其他类型,那么可以制作两个变体,一个用于A,一个用于B。 主要的一点是,只有在你不关心类型的时候才使用void*。 现在,如果您有50个具有相同基本结构的类型(例如,int a;int b;作为所有类型的第一个成员),并且希望函数对这些类型执行操作,那么只需将公共的第一个成员单独设置为类型,然后使函数接受它,并且pass object->a b或(a b*)object是不透明的类型,如果a b是第一个字段,这两个类型都可以工作。在您的结构中。 |
6
1
您可以使用宏,它们可以与任何类型一起使用,编译器将静态检查扩展的代码。缺点是代码密度(二进制)会恶化,而且更难调试。 我问这个 question about generic functions 不久前,答案会对你有所帮助。 |
7
1
您可以高效地将类型信息、继承和多态添加到C数据结构中,这就是C++所做的。( http://www.embedded.com/97/fe29712.htm ) |
8
1
绝对通用
考虑到许多C程序员和许多主要的C项目都考虑到了这种困境。我遇到过的所有重要的C项目,无论是开源的还是商业的,都选择了通用的
|
9
0
您可以使用C构建(某种)OO框架,但是您错过了很多好处…就像一个编译器能理解的OO类型系统。如果你坚持在C语言中做OO,C++是一个更好的选择。它比普通的C语言更复杂,但至少您可以获得适当的OO语言支持。 编辑:确定…如果你坚持我们不推荐C++,我建议你不要在C中做OO?就你的OO习惯而言,你应该 认为 就“对象”而言,但是不要将继承和多态性放在实现策略中。应谨慎使用泛型(使用函数指针)。
编辑2:实际上,我认为
|
10
0
在Java中的所有集合
是的,泛型(在1.5中引入)添加了语法糖分并防止对不安全的赋值进行编码,但是存储类型仍然是
所以,我认为当你使用
如果您经常在代码中这样做,我还将添加特定于类型的内联或宏包装器,用于从通用结构中分配/检索数据。
另外,你不应该做的一件事就是
|
11
0
一个通用容器可以用一点工作来包装,这样它就可以在类型安全的版本中被实例化。下面是一个例子,完整的标题链接在下面: /*通用实现*/
来自可用于实例化特定包装类型deque的头
|
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
milczi · Swift通用无强制展开向下投射 6 年前 |
bugs · Typescript-泛型类型扩展自身 6 年前 |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 6 年前 |
Blankdud · 具有默认数据的通用对象创建方法 6 年前 |
Tim Hutchison · 从泛型对象列表中读取泛型值 6 年前 |