Glib学习笔记(一)
你将学到什么
如何使用GObject实现一个新类
类头文件
声明一个类型的方法选择取决于类型是可被继承的还是不可被继承的。
- 不可被继承的类型(Final类型)使用
G_DECLARE_FINAL_TYPE宏来定义,还需要在源文件(不是在头文件)中定义一个结构来保存类实例数据。
/*
* Copyright/Licensing information.
*/
/* inclusion guard */
#ifndef __VIEWER_FILE_H__
#define __VIEWER_FILE_H__
#include <glib-object.h>
/*
* Potentially, include other headers on which this header depends.
*/
G_BEGIN_DECLS
/*
* Type declaration.
*/
#define VIEWER_TYPE_FILE viewer_file_get_type ()
G_DECLARE_FINAL_TYPE (ViewerFile, viewer_file, VIEWER, FILE, GObject)
/*
* Method definitions.
*/
ViewerFile *viewer_file_new (void);
G_END_DECLS
#endif /* __VIEWER_FILE_H__ */
- 可被继承的类型使用
G_DECLARE_DERIVABLE_TYPE宏来定义
/*
* Copyright/Licensing information.
*/
/* inclusion guard */
#ifndef __VIEWER_FILE_H__
#define __VIEWER_FILE_H__
#include <glib-object.h>
/*
* Potentially, include other headers on which this header depends.
*/
G_BEGIN_DECLS
/*
* Type declaration.
*/
#define VIEWER_TYPE_FILE viewer_file_get_type ()
G_DECLARE_DERIVABLE_TYPE (ViewerFile, viewer_file, VIEWER, FILE, GObject)
struct _ViewerFileClass
{
GObjectClass parent_class;
/* Class virtual function fields. */
void (* open) (ViewerFile *file,
GError **error);
/* Padding to allow adding up to 12 new virtual functions without
* breaking ABI. */
gpointer padding[12];
};
/*
* Method definitions.
*/
ViewerFile *viewer_file_new (void);
G_END_DECLS
#endif /* __VIEWER_FILE_H__ */
类源文件
源文件第一步就是包含上面的头文件
/*
* Copyright information
*/
#include "viewer-file.h"
/* Private structure definition. */
typedef struct {
gchar *filename;
/* stuff */
} ViewerFilePrivate;
/*
* forward definitions
*/
如果定义的是不可继承类型,还需要定义类实例数据结构
struct _ViewerFile
{
GObject parent_instance;
/* Other members, including private data. */
}
调用G_DEFINE_TYPE将会:
- 实现
viewer_file_get_type函数 - 定义了一个能在源文件范围内访问父类的指针
- 使用
G_DEFINE_TYPE_WITH_PRIVATE宏添加私有的实例数据到类型上
如果定义的是不可继承类型,使用G_DECLARE_FINAL_TYPE将私有数据存放在实例结构中,实例结构外部无法访问,也不会被其他类继承(因为定义的是不可继承类型)。
你也可以使用G_DEFINE_TYPE_WITH_CODE宏来控制get_type函数的实现,例如插入一个G_IMPLEMENT_INTERFACE宏实现的接口。
Glib学习笔记(一)的更多相关文章
- Glib学习笔记(四)
你将学到什么 使用GObject模拟实现接口 使用接口 首先按照学习笔记(一)定义一个普通的GObject类 使用G_DEFINE_TYPE_WITH_CODE和G_IMPLEMENT_INTERFA ...
- Glib学习笔记(二)
你将学到什么 如何实现Object的构造函数和析构函数 如何在条件检测不允许的情况下终止对象创建 Object的构造函数 对象的构造函数是不允许失败,如果你需要一个允许失败的GObject构造函数,使 ...
- Glib学习笔记(三)
你将学到什么 如何实现Object的方法 Object的方法 Object的public方法 在头文件声明一个函数,然后在源文件中实现函数即可 /* declaration in the header ...
- DBus学习笔记
摘要:DBus作为一个轻量级的IPC被越来越多的平台接受,在MeeGo中DBus也是主要的进程间通信方式,这个笔记将从基本概念开始记录笔者学习DBus的过程 [1] DBus学习笔记一:DBus学习的 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
随机推荐
- vim修行
查用的vim 操作 1.移动光标的方法 h 戒 向左箭央键(←) 光标向左移劢一个字符 j 戒 向下箭央键(↓) 光标向下移劢一个字符 k 戒 向上箭央键(↑) 光标向上移劢一个字符 l 戒 向右箭央 ...
- VerilogHDL编译预处理
编译预处理语句 编译预处理是VerilogHDL编译系统的一个组成部分,指编译系统会对一些特殊命令进行预处理,然后将预处理结果和源程序一起在进行通常的编译处理.以”`” (反引号)开始的某些标识符是编 ...
- VisualGDB系列8:使用VS创建CMake Linux项目
根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 本文介绍如何使用VS来创建.构建.调试一 ...
- java代码。从来没想过java里的继承是多么的难懂。如哲学
总结:实例.. 这里不加super("aaa",32); 运行:父类和子类的姓名,年龄是一样的.那这个super为什么没效果呢? 显示:class:Ji姓名是 小红年龄是:20课程 ...
- 侯捷STL学习(十)--容器hashtable探索(unordered set/map)
layout: post title: 侯捷STL学习(十) date: 2017-07-23 tag: 侯捷STL --- 第二十三节 容器hashtable探索 hashtable冲突(碰撞)处理 ...
- Rails通过页面Debug
<%= debug(headers) %>--在视图中显示伴随请求的头部信息 <%= debug(params) %>--在视图中显示请求中的参数 <%= debug(a ...
- [转]RegExp 构造函数创建了一个正则表达式对象,用于将文本与一个模式匹配
本文转自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp RegExp ...
- 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN
参考文献 [1]Rich feature hierarchies for accurate object detection and semantic segmentation [2]Fast R-C ...
- node与vue结合的前后端分离跨域问题
第一点:node作为服务端提供数据接口,vue使用axios访问接口, 安装axios npm install axios --save 安装完成后在main.js中增加一下配置: import ax ...
- AJAX——XMLHttpRequest对象的使用
AJAX是web2.0即动态网页的基础,而XMLHttpRequest对象又是AJAX的核心.XMLHttpRequest对象负责将用户信息以异步通信地发送到服务器端,并接收服务器响应信息和数据 一. ...