gpt4 book ai didi

c++ - 高效快捷地访问 CoreFoundation 容器

转载 作者:行者123 更新时间:2023-11-28 03:40:36 26 4
gpt4 key购买 nike

我正在尝试使用 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)重载运算符“[]”,不确定这是否是个好主意。

最佳答案

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

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

我会说坚持使用 1。

关于c++ - 高效快捷地访问 CoreFoundation 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9401044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com