C 可以扩展GKeyFile来保存一个私有的·;来源·;是否通过GType枚举字段?

C 可以扩展GKeyFile来保存一个私有的·;来源·;是否通过GType枚举字段?,c,private,glib,user-data,gobject,C,Private,Glib,User Data,Gobject,我正在为以下问题寻找一个好的解决方案: 有一些键存储在GKeyFile结构中,我从3个不同的来源将其放在那里:1)在数据中编译,2)其他ini文件,3)插件脚本 我想用它的来源来标记每个键/值对 我偶然发现了GType以及在运行时向现有类型添加私有数据成员的示例。这些例子非常简单()。所以我考虑在GKeyFile的GType中的某个地方添加这样的私有字段(源代码),基本上是每个键/值存储对中的(另一个GType?)类型的值,但我不知道应该怎么做 还有宏,它返回gkey文件的GType。但是,

我正在为以下问题寻找一个好的解决方案:

  • 有一些键存储在GKeyFile结构中,我从3个不同的来源将其放在那里:1)在数据中编译,2)其他ini文件,3)插件脚本
  • 我想用它的来源来标记每个键/值对
我偶然发现了
GType
以及在运行时向现有类型添加私有数据成员的示例。这些例子非常简单()。所以我考虑在GKeyFile的GType中的某个地方添加这样的私有字段(源代码),基本上是每个键/值存储对中的(另一个GType?)类型的值,但我不知道应该怎么做


还有宏,它返回
gkey文件的
GType
。但是,从何处开始?

除非控制类型的实现,否则不能向类型添加私有结构。您无法控制
GKeyFile
的实现(它是GLib的内部),因此您无法做到这一点


我认为您最好编写一个类来包装
GKeyFile
,并在上面实现您自己的逻辑。新类将有一个指向内部
GKeyFile
实例的指针,但不会从
GKeyFile
派生,因为其他代码不需要知道您的数据存储实际上是作为密钥文件实现的。

太糟糕了……控制实现的关键是IMO过于严肃的方法——我看不到有点笨拙(或只是缓慢…)的GLib编程团队能够显著改变实现。如果我可以利用GObject的内省,那么也许我可以发现类型是如何构建的,并最终扩展它?一个能说会道的编程团队成员试图帮助你,你称他们为“笨拙”,干得不错。。。这样的封装被广泛使用,并且通常被认为是一个好主意,尤其是对于库。您将无法使用GObject内省来完成此操作,因为它不会提供比您已经从GLib头文件中获得的更多的信息。请注意,对于GObject,您要求的功能由
g_object_set_data()
提供,但GKeyFile不是GObject。