我正在尝试使用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)重载运算符“[]”,不确定它是否是个好主意。
答案 0 :(得分:2)
正如您所指出的,Core Foundation API是一个C API,因此没有[]运算符可以重载。你基本上有3个选择:
我会说坚持1。