微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐