我正在尝试使用 GLIBMM 在 C++ 中重新实现一组 GLIB 类。它们中的大多数都是错误的,需要大量扩展,并且由于整个项目都是用 C++ 完成的,我更喜欢在更正之前移植代码。
不幸的是,我不是 GLIB 专家,即使我在官方文档上花了很多天时间,我仍然无法理解一些概念,尤其是关于属性的概念。
据我了解,属性是 setter 和 getter 的完全替代品(也许更多)。基本上,不是对每个属性使用专门的方法,而是对所有属性使用通用的 set/get_property 方法,使用名称(或 ID)访问属性,并使用像 GValue 这样的容器来保存多种数据。
我可以看到的唯一优势是能够访问名称包含在字符串中的属性(例如可能来自配置文件),但我肯定会遗漏一些东西。此外,这在 GLIB 中似乎是正确的,但在 Glib::ObjectBase 中却不是,它表示您应该更喜欢专用的 property_(*) getter/setter 而不是 property_set/get_value。
阅读有关 Glib::Property 的文档我不确定 C++ 中的完整属性实现应该如何,我认为缺乏 GLIB 经验使其变得更加困难。
我想使用 std get/set 方法将每个属性作为属性移动,但我不想做很多更改,因为太晚发现以前的方法更好:)
有人可以解释一下什么是属性(如果与 C++ 类属性相比)?你能给我一个带有信号/插槽的工作属性的例子吗?有人可以说明这两种方式的优点吗?
谢谢!