2012-02-22 3 views
0

CoreFoundataionコンテナを使用しようとしています。これは、プロパティリストにアクセスするときにとても便利な方法です。しかし、コンテナがネストされている場合は、内部コンテナにアクセスするのは本当に扱いにくいことに気付きます(たとえば、A CFArrayRefにはCFDictionaryRefが含まれていますが、値が別のCFArrayRefのキーがあります。CoreFoundationコンテナに効率的にアクセスできます。

CFArrayRef a 

    |----CFDictionaryRef b (assume it's at index 2 of a) 

        |----CFArrayRef c (assume, they key value is "array") 

それでは、私たちはCFArrayRef を得たとしましょうそして、私はこのような何かを入力して、私が持っている

cをCFArrayRefにcfindexタグ0にある要素にアクセスする:

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

見えることを私にはたくさんのタイピングがあります。私の推測では、CoreFoundationはC++ではなくCに基づいているため、要素にアクセスするために "[]"のような演算子のオーバーロードは行われません。

入力にこのアクセスを容易にする方法がある(多分同様読み取るためには?)

私は、私は「[]」特定のCFTypeRefのため(のようなCFArrayRefオーバーロード演算子を検討していますC++を使用しています、 CFDictionaryRef、CFStringRef)、それが良い考えであるかどうかは分かりません。

答えて

2

コアFoundation APIはC APIなので、オーバーロードする[]演算子はありません。あなたは本当にあなたが既にいくつかを持っている場合、C++

  • 使用のObjective-Cを使用したい場合は、すべての、読みやすさの問題を解決するために複数の行に

    1. 書き込みC
    2. 書き込みC++ラッパー:あなたは、基本的には3つの選択肢を持っていますあなたはここで言及されているタイプは、「フリーダイヤル」

    私は答え1.

  • +0

    おかげでスティックを言うと思います。私はそれを積極的に探していて、ほとんどあなたの答えで終わります。私は2を試しましたが、それは実際にはまず簡単だと思われましたが、私はそれを完全にC++に近代化するために別の辞書作成者クラスとプロキシオブジェクトを書く必要があると考えました。私はちょうどCスタイル(オプション1)で生きている。 –

    関連する問題