花了我很长时间才意识到变量有多重要和微妙:
1)存在于堆栈上
是.
这两件事情可以做到:
A)RAII
B)回顾GC
有趣的是,(1)& (2)不提供“较低”的语言,如C / Assembly;也不是像Ruby / Python / Java这样的“更高级”的语言(因为GC阻止可预测的对象的破坏).
我很好奇 – 由于语言设计的选择,你所知道的其他技术是非常C特定的.
谢谢!
编辑:如果你的答案是“这在C&这个其他langauge”,那也没关系.我想了解的事情类似于:
通过选择不具有某些特征(如GC),我们获得其他功能(如RAII可预测的对象破坏).在C的哪个方面,通过选择不具有其他“更高级别”风格具有的功能,C设法获得那些更高级别的流氓不能表达的模式.
解决方法
我真的很喜欢特质课.不完全具体的C(Scala有其他语言),但它允许您适应对象,基本上是指定类型应该支持的一组操作.想象一下,你想要一个“哈希”,在tr1 :: hash的意义上.哈希定义为某些类型,但不适用于其他类型.你如何使一个类为你想要的所有类型定义一个哈希值?你可以声明一个类,如:
template < typename T> struct hashing_tratis { typedef std::tr1::hash<T> hashing_type; };
也就是说,你希望有一个定义要使用正确的hasing_type的类.但是,对于myType来说,没有定义哈希,所以你可以写:
template <> struct hashing_traits<myType> { typedef class_that_kNows_how_to_hash_myType hashing_type; };
这样,假设您需要一种方法来排除您在程序中使用的任何类型(包括myType).您可以通过创建一个散列特征来编写“通用”哈希值:
template <typename T> struct something { typename hashing_traits<T>::hashing_type hasher; .... // here hasher is defined for all your relevant types,and kNows how to hash them