本文完全参考:http://garfileo.is-programmer.com/posts/24798.html,在此感谢gargileo写的优美的博文。
GObject库很麻烦,参考手册除了是英文之外更是晦涩。本文的代码都是参考照搬的,只是把原来的语言本地化了一下~~。
我们会创作一个双向链表,然后把它发展成一个类!
一、从一个双向链表的数据结构开始
经过指针摧残之后还有兴趣的人,应该会接触到数据结构这个BOSS,里面的双向链表是一个很NB的东西,是我经过长期努力,掌握的第一个高级货。
下面的代码是一个简单的双向链表的代码:
#ifndef DOUBLE_LIST_H
#define DOUBLE_LIST_H
struct double_list_node {
struct doule_list_node *prev;
struct double_list_node *next;
void *data;
};
struct double_list {
struct double_list_node *head;
struct double_list_node *tail;
};
#endif
这是最为原始的代码,通常我们会使用typedef来定义个数据类型,目的是把struct _xxx变成xxx。省去了写struct的重复劳动。
另外,double_list经常是被习惯的写为dlist。有时候缩写总是显得高级一些,比如生活大爆炸里我就学会了AFK——away from keyboard,也就是离开电脑一会的意思。
下面的代码会让你看上去专业一些:
#ifndef DLIST_H
#define DLIST_H
typedef struct _DListNode DListNode;
struct _DListNode {
DListNode *prev;
DListNode *next;
void *data;
};
typedef struct _DList DList;
struct _DList {
DListNode *head;
DListNode *tail;
};
#endif
至此,代码跟GObject没有一点关系,我们只是渐进的来熟悉结构体这个东西。
通常一个双向链表是不够用的,项目中经常会用到多个数据结构,这时候,命名就有学问了,不然容易重名,起冲突。
因此,缩写又站出来大显神威了,比如dlist我们可以根据需要加上前缀,ADList可以理解成apple_double_list么,哈哈。
原文作者介绍了一个叫做PT格式的缩写习惯,Project_Type_Double_List。简称PTDList。当然了,他举得是一个叫做多面体建模的例子,多面体:Polyhedron Modeling,因此就叫做PMDList了。
其实叫什么不重要,重要的是理解这种思想。
那么现在的代码就升级为:
#ifndef PM_DLIST_H
#define PM_DLIST_H
typedef struct _PMDListNode PMDListNode;
struct _PMDListNode {
PMD