C语言设计具体模式

花了我很长时间才意识到变量有多重要和微妙:

1)存在于堆栈上

2)当它们脱离范围时,它们的析构函数调用

是.

这两件事情可以做到:

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...