美文网首页
使用C语言实现泛型

使用C语言实现泛型

作者: jiangling500 | 来源:发表于2019-05-07 23:05 被阅读0次

Redis中的泛型链表

typedef struct listNode
{
  struct listNode *prev;
  struct listNode *next;
  void *value;
} listNode;

typedef struct list
{
  listNode *head;
  listNode *tail;
  void *(*dup)(void *ptr);
  void (*free)(void *ptr);
  int (*match)(void *ptr, void *key);
  unsigned int len;
} list;

其中:

  • 链表结点使用void*指针来保存节点值。
  • dupfreematch成员是用于实现多态链表所需的类型特定函数。
    所以链表可以用于保存各种不同类型的值。

使用Redis中的泛型链表

TODO

Redis中的多态字典

typedef struct dictEntry {
    void *key;
    void *val;
    struct dictEntry *next;
} dictEntry;

typedef struct dictType
{
    unsigned int (*hashFunction)(const void *key);
    void *(*keyDup)(void *privdata, const void *key);
    void *(*valDup)(void *privdata, const void *obj);
    int (*keyCompare)(void *privdata, const void *key1, const void *key2);
    void (*keyDestructor)(void *privdata, void *key);
    void (*valDestructor)(void *privdata, void *obj);
} dictType;

typedef struct dictht {
    dictEntry **table;
    unsigned long size;
    unsigned long sizemask;
    unsigned long used;
} dictht;

typedef struct dict
{
  dictType *type;
  void *privdata;
  dictht ht[2];
  int rehashidx;
  int iterators;
};

type属性和privdata属性是针对不同类型的键值对,为创建多态字典而设置的。

参考

相关文章

  • 使用C语言实现泛型

    Redis中的泛型链表 其中: 链表结点使用void*指针来保存节点值。 dup、free和match成员是用于实...

  • ★13.泛型

    关于泛型 静态方法无法访问泛型的类型参数。(C++可以) Java泛型使用擦除实现,如运行时,List ,List...

  • C#---API-02(Application Programm

    一、泛型概述 1. 泛型 1.1 泛型是什么? 泛型(generic)是C#语言2.0和通用语言运行时(CLR)得...

  • C#基础提升系列——C#泛型

    C# 泛型(Generics) 泛型概述 泛型是C#编程语言的一部分,它与程序集中的IL(Intermediate...

  • golang Interface 泛型编程

    严格来说,在 Golang 中并不支持泛型编程。在 C++ 等高级语言中使用泛型编程非常的简单,所以泛型编程一直是...

  • C++ 模板

    模板 泛型,是一种将类型参数化以达到代码复用的技术,C++中使用模板来实现泛型 模板的使用格式如下:templat...

  • 泛型

    泛型 Why:为什么需要泛型 What:泛型是什么; How:泛型怎么实现 When:泛型什么时候使用 Where...

  • Java-泛型

    关键字:泛型、类型擦除、泛型实现、泛型缺点、泛型运用。 1.不使用泛型会怎么样? 例子1,int、String元素...

  • Golang学习笔记---“泛型”的实现

    Golang学习笔记---“泛型”的实现 大家都知道,go语言中是没有泛型的,但是我们可以通过空接口的方式来实现泛...

  • Java 集合深度复制

    泛型对象实现 Cloneable 接口 重写泛型对象的 clone 方法 使用的时候调用 泛型对象的 clone...

网友评论

      本文标题:使用C语言实现泛型

      本文链接:https://www.haomeiwen.com/subject/xcvuoqtx.html