📄 gtype.sgml
字号:
<refentry id="gobject-GType"><refmeta><refentrytitle>GType</refentrytitle><manvolnum>3</manvolnum><refmiscinfo>GOBJECT Library</refmiscinfo></refmeta><refnamediv><refname>GType</refname><refpurpose>The GLib Runtime type identification and management system</refpurpose></refnamediv><refsynopsisdiv><title>Synopsis</title><synopsis>#include <gobject.h>typedef <link linkend="GType">GType</link>;#define <link linkend="G-TYPE-FUNDAMENTAL-CAPS">G_TYPE_FUNDAMENTAL</link> (type)#define <link linkend="G-TYPE-FUNDAMENTAL-MAX-CAPS">G_TYPE_FUNDAMENTAL_MAX</link>#define <link linkend="G-TYPE-FUNDAMENTAL-SHIFT-CAPS">G_TYPE_FUNDAMENTAL_SHIFT</link>#define <link linkend="G-TYPE-MAKE-FUNDAMENTAL-CAPS">G_TYPE_MAKE_FUNDAMENTAL</link> (x)#define <link linkend="G-TYPE-IS-ABSTRACT-CAPS">G_TYPE_IS_ABSTRACT</link> (type)#define <link linkend="G-TYPE-IS-DERIVED-CAPS">G_TYPE_IS_DERIVED</link> (type)#define <link linkend="G-TYPE-IS-FUNDAMENTAL-CAPS">G_TYPE_IS_FUNDAMENTAL</link> (type)#define <link linkend="G-TYPE-IS-VALUE-TYPE-CAPS">G_TYPE_IS_VALUE_TYPE</link> (type)#define <link linkend="G-TYPE-HAS-VALUE-TABLE-CAPS">G_TYPE_HAS_VALUE_TABLE</link> (type)#define <link linkend="G-TYPE-IS-CLASSED-CAPS">G_TYPE_IS_CLASSED</link> (type)#define <link linkend="G-TYPE-IS-INSTANTIATABLE-CAPS">G_TYPE_IS_INSTANTIATABLE</link> (type)#define <link linkend="G-TYPE-IS-DERIVABLE-CAPS">G_TYPE_IS_DERIVABLE</link> (type)#define <link linkend="G-TYPE-IS-DEEP-DERIVABLE-CAPS">G_TYPE_IS_DEEP_DERIVABLE</link> (type)#define <link linkend="G-TYPE-IS-INTERFACE-CAPS">G_TYPE_IS_INTERFACE</link> (type)struct <link linkend="GTypeInterface">GTypeInterface</link>;struct <link linkend="GTypeInstance">GTypeInstance</link>;struct <link linkend="GTypeInfo">GTypeInfo</link>;struct <link linkend="GTypeFundamentalInfo">GTypeFundamentalInfo</link>;struct <link linkend="GInterfaceInfo">GInterfaceInfo</link>;struct <link linkend="GTypeValueTable">GTypeValueTable</link>;#define <link linkend="G-TYPE-FROM-INSTANCE-CAPS">G_TYPE_FROM_INSTANCE</link> (instance)#define <link linkend="G-TYPE-FROM-CLASS-CAPS">G_TYPE_FROM_CLASS</link> (g_class)#define <link linkend="G-TYPE-FROM-INTERFACE-CAPS">G_TYPE_FROM_INTERFACE</link> (g_iface)#define <link linkend="G-TYPE-INSTANCE-GET-CLASS-CAPS">G_TYPE_INSTANCE_GET_CLASS</link> (instance, g_type, c_type)#define <link linkend="G-TYPE-INSTANCE-GET-INTERFACE-CAPS">G_TYPE_INSTANCE_GET_INTERFACE</link> (instance, g_type, c_type)#define <link linkend="G-TYPE-CHECK-INSTANCE-CAPS">G_TYPE_CHECK_INSTANCE</link> (instance)#define <link linkend="G-TYPE-CHECK-INSTANCE-CAST-CAPS">G_TYPE_CHECK_INSTANCE_CAST</link> (instance, g_type, c_type)#define <link linkend="G-TYPE-CHECK-INSTANCE-TYPE-CAPS">G_TYPE_CHECK_INSTANCE_TYPE</link> (instance, g_type)#define <link linkend="G-TYPE-CHECK-CLASS-CAST-CAPS">G_TYPE_CHECK_CLASS_CAST</link> (g_class, g_type, c_type)#define <link linkend="G-TYPE-CHECK-CLASS-TYPE-CAPS">G_TYPE_CHECK_CLASS_TYPE</link> (g_class, g_type)#define <link linkend="G-TYPE-CHECK-VALUE-CAPS">G_TYPE_CHECK_VALUE</link> (value)#define <link linkend="G-TYPE-CHECK-VALUE-TYPE-CAPS">G_TYPE_CHECK_VALUE_TYPE</link> (value, g_type)#define <link linkend="G-TYPE-FLAG-RESERVED-ID-BIT-CAPS">G_TYPE_FLAG_RESERVED_ID_BIT</link>void <link linkend="g-type-init">g_type_init</link> (void);enum <link linkend="GTypeDebugFlags">GTypeDebugFlags</link>;void <link linkend="g-type-init-with-debug-flags">g_type_init_with_debug_flags</link> (<link linkend="GTypeDebugFlags">GTypeDebugFlags</link> debug_flags);G_CONST_RETURN <link linkend="gchar">gchar</link>* <link linkend="g-type-name">g_type_name</link> (<link linkend="GType">GType</link> type);<link linkend="GQuark">GQuark</link> <link linkend="g-type-qname">g_type_qname</link> (<link linkend="GType">GType</link> type);<link linkend="GType">GType</link> <link linkend="g-type-from-name">g_type_from_name</link> (const <link linkend="gchar">gchar</link> *name);<link linkend="GType">GType</link> <link linkend="g-type-parent">g_type_parent</link> (<link linkend="GType">GType</link> type);<link linkend="guint">guint</link> <link linkend="g-type-depth">g_type_depth</link> (<link linkend="GType">GType</link> type);<link linkend="GType">GType</link> <link linkend="g-type-next-base">g_type_next_base</link> (<link linkend="GType">GType</link> leaf_type, <link linkend="GType">GType</link> root_type);<link linkend="gboolean">gboolean</link> <link linkend="g-type-is-a">g_type_is_a</link> (<link linkend="GType">GType</link> type, <link linkend="GType">GType</link> is_a_type);<link linkend="gpointer">gpointer</link> <link linkend="g-type-class-ref">g_type_class_ref</link> (<link linkend="GType">GType</link> type);<link linkend="gpointer">gpointer</link> <link linkend="g-type-class-peek">g_type_class_peek</link> (<link linkend="GType">GType</link> type);void <link linkend="g-type-class-unref">g_type_class_unref</link> (<link linkend="gpointer">gpointer</link> g_class);<link linkend="gpointer">gpointer</link> <link linkend="g-type-class-peek-parent">g_type_class_peek_parent</link> (<link linkend="gpointer">gpointer</link> g_class);<link linkend="gpointer">gpointer</link> <link linkend="g-type-interface-peek">g_type_interface_peek</link> (<link linkend="gpointer">gpointer</link> instance_class, <link linkend="GType">GType</link> iface_type);<link linkend="gpointer">gpointer</link> <link linkend="g-type-interface-peek-parent">g_type_interface_peek_parent</link> (<link linkend="gpointer">gpointer</link> g_iface);<link linkend="GType">GType</link>* <link linkend="g-type-children">g_type_children</link> (<link linkend="GType">GType</link> type, <link linkend="guint">guint</link> *n_children);<link linkend="GType">GType</link>* <link linkend="g-type-interfaces">g_type_interfaces</link> (<link linkend="GType">GType</link> type, <link linkend="guint">guint</link> *n_interfaces);void <link linkend="g-type-set-qdata">g_type_set_qdata</link> (<link linkend="GType">GType</link> type, <link linkend="GQuark">GQuark</link> quark, <link linkend="gpointer">gpointer</link> data);<link linkend="gpointer">gpointer</link> <link linkend="g-type-get-qdata">g_type_get_qdata</link> (<link linkend="GType">GType</link> type, <link linkend="GQuark">GQuark</link> quark);void <link linkend="g-type-query">g_type_query</link> (<link linkend="GType">GType</link> type, <link linkend="GTypeQuery">GTypeQuery</link> *query);struct <link linkend="GTypeQuery">GTypeQuery</link>;void (<link linkend="GBaseInitFunc">*GBaseInitFunc</link>) (<link linkend="gpointer">gpointer</link> g_class);void (<link linkend="GBaseFinalizeFunc">*GBaseFinalizeFunc</link>) (<link linkend="gpointer">gpointer</link> g_class);void (<link linkend="GClassInitFunc">*GClassInitFunc</link>) (<link linkend="gpointer">gpointer</link> g_class, <link linkend="gpointer">gpointer</link> class_data);void (<link linkend="GClassFinalizeFunc">*GClassFinalizeFunc</link>) (<link linkend="gpointer">gpointer</link> g_class, <link linkend="gpointer">gpointer</link> class_data);void (<link linkend="GInstanceInitFunc">*GInstanceInitFunc</link>) (<link linkend="GTypeInstance">GTypeInstance</link> *instance, <link linkend="gpointer">gpointer</link> g_class);void (<link linkend="GInterfaceInitFunc">*GInterfaceInitFunc</link>) (<link linkend="gpointer">gpointer</link> g_iface, <link linkend="gpointer">gpointer</link> iface_data);void (<link linkend="GInterfaceFinalizeFunc">*GInterfaceFinalizeFunc</link>) (<link linkend="gpointer">gpointer</link> g_iface, <link linkend="gpointer">gpointer</link> iface_data);<link linkend="gboolean">gboolean</link> (<link linkend="GTypeClassCacheFunc">*GTypeClassCacheFunc</link>) (<link linkend="gpointer">gpointer</link> cache_data, <link linkend="GTypeClass">GTypeClass</link> *g_class);enum <link linkend="GTypeFlags">GTypeFlags</link>;enum <link linkend="GTypeFundamentalFlags">GTypeFundamentalFlags</link>;<link linkend="GType">GType</link> <link linkend="g-type-register-static">g_type_register_static</link> (<link linkend="GType">GType</link> parent_type, const <link linkend="gchar">gchar</link> *type_name, const <link linkend="GTypeInfo">GTypeInfo</link> *info, <link linkend="GTypeFlags">GTypeFlags</link> flags);<link linkend="GType">GType</link> <link linkend="g-type-register-dynamic">g_type_register_dynamic</link> (<link linkend="GType">GType</link> parent_type, const <link linkend="gchar">gchar</link> *type_name, <link linkend="GTypePlugin">GTypePlugin</link> *plugin, <link linkend="GTypeFlags">GTypeFlags</link> flags);<link linkend="GType">GType</link> <link linkend="g-type-register-fundamental">g_type_register_fundamental</link> (<link linkend="GType">GType</link> type_id, const <link linkend="gchar">gchar</link> *type_name, const <link linkend="GTypeInfo">GTypeInfo</link> *info, const <link linkend="GTypeFundamentalInfo">GTypeFundamentalInfo</link> *finfo, <link linkend="GTypeFlags">GTypeFlags</link> flags);void <link linkend="g-type-add-interface-static">g_type_add_interface_static</link> (<link linkend="GType">GType</link> instance_type, <link linkend="GType">GType</link> interface_type, const <link linkend="GInterfaceInfo">GInterfaceInfo</link> *info);void <link linkend="g-type-add-interface-dynamic">g_type_add_interface_dynamic</link> (<link linkend="GType">GType</link> instance_type, <link linkend="GType">GType</link> interface_type, <link linkend="GTypePlugin">GTypePlugin</link> *plugin);void <link linkend="g-type-interface-add-prerequisite">g_type_interface_add_prerequisite</link> (<link linkend="GType">GType</link> interface_type, <link linkend="GType">GType</link> prerequisite_type);<link linkend="GTypePlugin">GTypePlugin</link>* <link linkend="g-type-get-plugin">g_type_get_plugin</link> (<link linkend="GType">GType</link> type);<link linkend="GTypePlugin">GTypePlugin</link>* <link linkend="g-type-interface-get-plugin">g_type_interface_get_plugin</link> (<link linkend="GType">GType</link> instance_type, <link linkend="GType">GType</link> implementation_type);<link linkend="GType">GType</link> <link linkend="g-type-fundamental-next">g_type_fundamental_next</link> (void);<link linkend="GType">GType</link> <link linkend="g-type-fundamental">g_type_fundamental</link> (<link linkend="GType">GType</link> type_id);<link linkend="GTypeInstance">GTypeInstance</link>* <link linkend="g-type-create-instance">g_type_create_instance</link> (<link linkend="GType">GType</link> type);void <link linkend="g-type-free-instance">g_type_free_instance</link> (<link linkend="GTypeInstance">GTypeInstance</link> *instance);void <link linkend="g-type-add-class-cache-func">g_type_add_class_cache_func</link> (<link linkend="gpointer">gpointer</link> cache_data, <link linkend="GTypeClassCacheFunc">GTypeClassCacheFunc</link> cache_func);void <link linkend="g-type-remove-class-cache-func">g_type_remove_class_cache_func</link> (<link linkend="gpointer">gpointer</link> cache_data, <link linkend="GTypeClassCacheFunc">GTypeClassCacheFunc</link> cache_func);void <link linkend="g-type-class-unref-uncached">g_type_class_unref_uncached</link> (<link linkend="gpointer">gpointer</link> g_class);<link linkend="GTypeValueTable">GTypeValueTable</link>* <link linkend="g-type-value-table-peek">g_type_value_table_peek</link> (<link linkend="GType">GType</link> type);#define <link linkend="G-TYPE-INVALID-CAPS">G_TYPE_INVALID</link>#define <link linkend="G-TYPE-NONE-CAPS">G_TYPE_NONE</link>#define <link linkend="G-TYPE-INTERFACE-CAPS">G_TYPE_INTERFACE</link>#define <link linkend="G-TYPE-CHAR-CAPS">G_TYPE_CHAR</link>#define <link linkend="G-TYPE-UCHAR-CAPS">G_TYPE_UCHAR</link>#define <link linkend="G-TYPE-BOOLEAN-CAPS">G_TYPE_BOOLEAN</link>#define <link linkend="G-TYPE-INT-CAPS">G_TYPE_INT</link>#define <link linkend="G-TYPE-UINT-CAPS">G_TYPE_UINT</link>#define <link linkend="G-TYPE-LONG-CAPS">G_TYPE_LONG</link>#define <link linkend="G-TYPE-ULONG-CAPS">G_TYPE_ULONG</link>#define <link linkend="G-TYPE-INT64-CAPS">G_TYPE_INT64</link>#define <link linkend="G-TYPE-UINT64-CAPS">G_TYPE_UINT64</link>#define <link linkend="G-TYPE-ENUM-CAPS">G_TYPE_ENUM</link>#define <link linkend="G-TYPE-FLAGS-CAPS">G_TYPE_FLAGS</link>#define <link linkend="G-TYPE-FLOAT-CAPS">G_TYPE_FLOAT</link>#define <link linkend="G-TYPE-DOUBLE-CAPS">G_TYPE_DOUBLE</link>#define <link linkend="G-TYPE-STRING-CAPS">G_TYPE_STRING</link>#define <link linkend="G-TYPE-POINTER-CAPS">G_TYPE_POINTER</link>#define <link linkend="G-TYPE-BOXED-CAPS">G_TYPE_BOXED</link>#define <link linkend="G-TYPE-PARAM-CAPS">G_TYPE_PARAM</link>#define <link linkend="G-TYPE-OBJECT-CAPS">G_TYPE_OBJECT</link>#define <link linkend="G-TYPE-RESERVED-GLIB-FIRST-CAPS">G_TYPE_RESERVED_GLIB_FIRST</link>#define <link linkend="G-TYPE-RESERVED-GLIB-LAST-CAPS">G_TYPE_RESERVED_GLIB_LAST</link>#define <link linkend="G-TYPE-RESERVED-BSE-FIRST-CAPS">G_TYPE_RESERVED_BSE_FIRST</link>#define <link linkend="G-TYPE-RESERVED-BSE-LAST-CAPS">G_TYPE_RESERVED_BSE_LAST</link>#define <link linkend="G-TYPE-RESERVED-USER-FIRST-CAPS">G_TYPE_RESERVED_USER_FIRST</link></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The GType API is the foundation of the GObject system. It provides thefacilities for registering and managing all fundamental data types,user-defined object and interface types. Before using any GTypeor GObject functions, <link linkend="g-type-init">g_type_init</link>() must be called to initialize thetype system.</para><para>For type creation and registration purposes, all types fall into one oftwo categories: static or dynamic. Static types are never loaded orunloaded at run-time as dynamic types may be. Static types are createdwith <link linkend="g-type-register-static">g_type_register_static</link>() that gets type specific information passedin via a <link linkend="GTypeInfo">GTypeInfo</link> structure.Dynamic types are created with <link linkend="g-type-register-dynamic">g_type_register_dynamic</link>() which takes a<link linkend="GTypePlugin">GTypePlugin</link> structure instead. The remaining type information (the<link linkend="GTypeInfo">GTypeInfo</link> structure) is retrived during runtime through <link linkend="GTypePlugin">GTypePlugin</link>and the g_type_plugin_*() API.These registration functions are usually called only once from a function whose only purpose is to return the type identifier for a specific class. Once the type (or class or interface) is registered,it may be instantiated, inherited, or implemented depending on exactlywhat sort of type it is.There is also a third registration function for registering fundamentaltypes called <link linkend="g-type-register-fundamental">g_type_register_fundamental</link>() which requires both a <link linkend="GTypeInfo">GTypeInfo</link>structure and a GTypeFundamentalInfo structure but it is seldom usedsince most fundamental types are predefined rather than user-defined.</para></refsect1><refsect1><title>Details</title><refsect2><title><anchor id="GType">GType</title><para>A numerical value which represents the unique identifier of a registeredtype.</para></refsect2><refsect2><title><anchor id="G-TYPE-FUNDAMENTAL-CAPS">G_TYPE_FUNDAMENTAL()</title><programlisting>#define G_TYPE_FUNDAMENTAL(type) (g_type_fundamental (type))</programlisting><para>Returns <link linkend="TRUE-CAPS">TRUE</link> if <parameter>type</parameter> is a fundamental data type such as <link linkend="G-TYPE-INT-CAPS">G_TYPE_INT</link> or<link linkend="G-TYPE-POINTER-CAPS">G_TYPE_POINTER</link>. Fundamental types are types that serve as fundaments forthe derived types, thus they are the roots of distinct inheritance hierarchies.</para><informaltable pgwide="1" frame="none" role="params"><tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*"><tbody><row><entry align="right"><parameter>type</parameter> :</entry><entry>A <link linkend="GType">GType</link> value.</entry></row></tbody></tgroup></informaltable></refsect2><refsect2><title><anchor id="G-TYPE-FUNDAMENTAL-MAX-CAPS">G_TYPE_FUNDAMENTAL_MAX</title><programlisting>#define G_TYPE_FUNDAMENTAL_MAX (255 << G_TYPE_FUNDAMENTAL_SHIFT)</programlisting><para>An integer constant that represents the number of identifiers reservedfor types that are assigned at compile-time.</para></refsect2><refsect2><title><anchor id="G-TYPE-FUNDAMENTAL-SHIFT-CAPS">G_TYPE_FUNDAMENTAL_SHIFT</title><programlisting>#define G_TYPE_FUNDAMENTAL_SHIFT (2)</programlisting><para></para></refsect2><refsect2><title><anchor id="G-TYPE-MAKE-FUNDAMENTAL-CAPS">G_TYPE_MAKE_FUNDAMENTAL()</title><programlisting>#define G_TYPE_MAKE_FUNDAMENTAL(x) ((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))</programlisting><para></para><informaltable pgwide="1" frame="none" role="params"><tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*"><tbody><row><entry align="right"><parameter>x</parameter> :</entry><entry></entry></row></tbody></tgroup></informaltable></refsect2><refsect2><title><anchor id="G-TYPE-IS-ABSTRACT-CAPS">G_TYPE_IS_ABSTRACT()</title><programlisting>#define G_TYPE_IS_ABSTRACT(type) (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT))</programlisting><para>Returns <link linkend="TRUE-CAPS">TRUE</link> if <parameter>type</parameter> is an abstract type. An abstract type can not beinstantiated and is normally used as an abstract base class forderived classes.</para><informaltable pgwide="1" frame="none" role="params"><tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*"><tbody><row><entry align="right"><parameter>type</parameter> :</entry><entry>A <link linkend="GType">GType</link> value.</entry></row></tbody></tgroup></informaltable></refsect2>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -