访问CoreFoundation容器的高效和快速

时间:2012-02-22 18:47:25

标签: c++ objective-c macos core-foundation

我正在尝试使用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 a 我想在CFArrayRef c

中访问CFIndex 0中的元素

我必须输入这样的内容:

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

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

有没有办法让这种访问更容易打字(也许还可以阅读?)

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

1 个答案:

答案 0 :(得分:2)

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

  1. 在多行上写C以解决可读性问题
  2. 如果你真的想使用C ++,
  3. 编写C ++包装器
  4. 使用Objective-C如果你已经有了一些,你在这里提到的所有类型都是“免费”
  5. 我会说坚持1。