加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C语言设计具体模式

发布时间:2020-12-16 06:02:41 所属栏目:百科 来源:网络整理
导读:花了我很长时间才意识到变量有多重要和微妙: 1)存在于堆栈上 2)当它们脱离范围时,它们的析构函数被调用 是. 这两件事情可以做到: A)RAII B)回顾GC 有趣的是,(1) (2)不提供“较低”的语言,如C / Assembly;也不是像Ruby / Python / Java这样的“更高级”的语
花了我很长时间才意识到变量有多重要和微妙:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读