Core FoundationにNSValueに対応するものはないので、C構造体をCFMutableDictionaryに格納する方法を教えてください。CFMutableDictionaryでのC構造体の格納
答えて
まず、NSValueをCFMutableDictionaryにそのまま置くことができます。答えは「NSValueを使用する」です。しかし、私はあなたの質問の残りの部分は "Cocoaオブジェクトを使用しない"と仮定しています。その場合、保持しないCFMutableDictionaryを作成し、必要なポインタを置くことができます。いくつかのコード例については、"Defining Custom Collection Callbacks"を参照してください。私はこれらをたくさん使っています。
これらはまだポインタでなければならないことに注意してください。したがって、スタックではなくヒープに構造体を割り当てる必要があります。つまり、メモリ管理が問題になります。もちろん、あなたが望むものであれば何でもできるコールバックのカスタムセットを作成することができます。したがって、独自のref-countingシステムでboostやboostを使用している場合でも、CFMutableDictionaryでそれを実装できます。
もちろん、構造体を小さなデータオブジェクトで置き換えることができます。それは通常はずっと簡単です。しかし、さまざまな問題にはさまざまな解決策が必要です。
CFMutableDictionary
CFDictionaryAddValue CFTypeオブジェクトまたは辞書に追加するポインタ値。
あなたは構造体へのポインタを渡すだけです。
うわー、私は間違いなく文書で少し近づいているはずです。カスタムコールバックを提供する必要がありますか、そのまま使用することはできますか? –
構造体へのポインタがCFTypeを必要とするデフォルトの保持メソッドに渡されたときにクラッシュします。これが機能するには、コールバックをオーバーロードする必要があります。 –
- 1. 構造体をBSTに格納
- 2. C構造体内の構造体内部の構造体
- 3. 共有メモリinc内のベクトルで構造体を格納するC
- 4. 構造体へのポインタの配列への格納? iPhone
- 5. Arduinoの構造体に 'Client'を格納しています
- 6. 構造体をColdfusionセッション変数に格納できますか?
- 7. 文字列を構造体に格納できません
- 8. C言語の新機能:構造体を配列に格納する
- 9. 構造体にベクターを格納することは可能ですか? C++
- 10. std :: mapに型や構造体を格納する
- 11. springセキュリティACLをnosql構造体に格納
- 12. 構造体とintを配列に格納する
- 13. 構造体配列をカーネル空間に格納する、Linux
- 14. 明示的に構造体に項目を格納する
- 15. 構造体inodeにデータを格納する
- 16. 動的構造体に行を格納する
- 17. 構造体が独自のサイズを格納するのはなぜですか?
- 18. C++の構造体のオーバーロード
- 19. C++の構造体のデータメンバー
- 20. gen_server状態で複数の構造体を格納する場合
- 21. C:構造体内の構造体要素へのポインタ
- 22. 異なる構造体内の構造体へのポインタ。 C
- 23. C#:構造体内の構造体へのポインタ
- 24. C++構造体コンストラクタ
- 25. C - エラー構造体
- 26. 構造体callc c
- 27. ペアを格納するデータ構造
- 28. C++のenumと構造体
- 29. c構造体の関係
- 30. C++匿名の構造体
ありがとうRob!正確に私が探していたもの:非保持辞書。 –
もう一つのオプションは、CFDataオブジェクトを介して構造体を渡すことです。 APIはこの種の使用法にはあまり適していません。NSValueが提供するエンディアン認識の面を失うことになりますが、他にも多くの欠点はありません。ある意味では、NSValueとNSDataは両方とも「生のバイト」のコピーを格納します。 NSValueは余分なメタデータを追跡します。これは、多くの目的、つまりCFコレクションクラスを介してメモリ内の構造体を渡すことはおそらく必要ありません。だからあなたの値の型をNSValueのカテゴリとして追加するのではなく、代わりにCFDataRefに/からいくつかのヘルパー関数を書くことができますか? – natevw