J'essaie d'utiliser des conteneurs CoreFoundataion. Il semble être un moyen très pratique lors de l'accès à la liste des propriétés. Cependant, je remarque qu'il est vraiment difficile d'accéder à des conteneurs internes si le conteneur est imbriqué (par exemple, un CFArrayRef contient un CFDictionaryRef, qui a alors une clé dont la valeur est un autre CFArrayRef.Peut-être qu'un graphique ci-dessous montre un peu mieux).Efficace et rapide pour accéder aux conteneurs CoreFoundation
CFArrayRef a
|----CFDictionaryRef b (assume it's at index 2 of a)
|----CFArrayRef c (assume, they key value is "array")
Alors disons que nous avons un CFArrayRef un et je veux accéder à l'élément à CFINDEX 0 dans CFArrayRef c
Je dois taper quelque chose comme ceci:
CFArrayGetValueAtIndex((CFArrayRef)CFDictionaryGetValue((CFDictionaryRef)CFArrayGetValueAtIndex(a, 2), CFSTR("array")), 0)
qui ressemble Pour moi, c'est beaucoup de dactylographie. Ma conjecture est que CoreFoundation est basé sur C plutôt que C++, donc il ne fournit pas de surcharge d'opérateur comme "[]" pour accéder à son élément.
Y at-il un moyen de rendre cet accès plus facile à taper (peut-être pour la lecture aussi bien?)
J'utilise C++, je considérais surcharge l'opérateur « [] » pour certains CFTypeRef (comme CFArrayRef, CFDictionaryRef, CFStringRef), je ne sais pas si c'est une bonne idée.
merci pour la réponse. Je le cherchais activement, et je finissais à peu près avec tes réponses. J'ai essayé 2, il a semblé facile en premier mais alors j'ai pensé que j'ai besoin d'écrire différents objets de classe et de proxy de créateur de dictionnaire pour le rendre complètement C++ modernisé. Je finis par vivre avec n'importe quel style C (option 1). –