访问CoreFoundation容器的高效快捷方式

Efficient and Quickway to access CoreFoundation Containers

本文关键字:高效 快捷方式 CoreFoundation 访问      更新时间:2023-10-16

我正在尝试使用CoreFoundataion容器。在访问属性列表时,这似乎是一种非常方便的方式。然而,我注意到,如果容器是嵌套的,那么访问内部容器真的很尴尬(例如,CFArrayRef包含一个CFDictionaryRef,然后它有一个值为另一个CFArrayRef的键。也许下面的图表显示得更好)。

CFArrayRef a
    |----CFDictionaryRef b (assume it's at index 2 of a)
                  |----CFArrayRef c (assume, they key value is "array")

假设我们有一个CFArrayRef我想访问CFArrayRef c 中CFIndex 0的元素

我必须键入这样的内容:

CFArrayGetValueAtIndex((CFArrayRef)CFDictionaryGetValue((CFDictionaryRef)CFArrayGetValueAtIndex(a, 2), CFSTR("array")), 0)

在我看来,这是大量的打字。我的猜测是,CoreFoundation是基于C而不是C++的,所以它不提供像"[]"这样的运算符重载来访问它的元素。

有没有一种方法可以让这种访问在打字时更容易(也许也可以阅读?)

我正在使用C++,我正在考虑为某些CFTypeRef(如CFArrayRef、CFDictionaryRef、CFStringRef)重载运算符"[]",不确定这是否是个好主意。

如您所述,Core Foundation API是一个C API,因此没有[]运算符可重载。你基本上有3个选择:

  1. 在多行上编写C以解决可读性问题
  2. 如果您真的想使用C,请编写C++包装器++
  3. 如果你已经有了Objective-C,那么你在这里提到的所有类型都是"免费的"

我会说坚持1。