Я пытаюсь использовать контейнеры 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
И я хочу получить доступ к элементу в CFIndex 0 в CFArrayRef c
Я должен напечатать что-то вроде этого:
CFArrayGetValueAtIndex((CFArrayRef)CFDictionaryGetValue((CFDictionaryRef)CFArrayGetValueAtIndex(a, 2), CFSTR("array")), 0)
Мне кажется, это много печатать. Я предполагаю, что CoreFoundation основан на C, а не на C ++, поэтому он не обеспечивает перегрузку операторов, например "[]", для доступа к его элементу.
Есть ли способ сделать этот доступ проще при наборе текста (возможно, и для чтения?)
Я использую C ++, я рассматриваю возможность перегрузки оператора "[]" для определенного CFTypeRef (такого как CFArrayRef, CFDictionaryRef, CFStringRef), но не уверен, что это хорошая идея.