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. C#でGlobalVariables.csに構造体の配列を格納する
- 2. Cの構造体へのポインタを整数として格納
- 3. 構造体をBSTに格納
- 4. 構造体を配列に格納する(C++)
- 5. 構造体C:配列に値を格納する
- 6. C# - 設定ファイルに構造体を格納する
- 7. C++の構造体内の構造体
- 8. C構造体内の構造体内部の構造体
- 9. Cプログラミング:ファイルを読み込んで構造体の配列に格納する
- 10. 共有メモリinc内のベクトルで構造体を格納するC
- 11. 構造体へのポインタの配列への格納? iPhone
- 12. JuliaのSharedArrayに構造体を格納する方法は?
- 13. Arduinoの構造体に 'Client'を格納しています
- 14. 構造体の配列にテキストファイルを格納する
- 15. C言語の新機能:構造体を配列に格納する
- 16. 構造体をColdfusionセッション変数に格納できますか?
- 17. 文字列を構造体に格納できません
- 18. 構造体にベクターを格納することは可能ですか? C++
- 19. C/C++ qsort構造体内の構造体の配列
- 20. C - 構造体
- 21. C構造体
- 22. C/C++ - 構造体
- 23. .csvファイルを読み込み、ベクトルと構造体に値を格納するC++
- 24. 他の構造体を指す構造体ポインタメンバがセグメンテーションフォールト(C/C++)
- 25. 動的構造体に行を格納する
- 26. 構造体inodeにデータを格納する
- 27. 構造体に寿命を持つクロージャを格納する
- 28. springセキュリティACLをnosql構造体に格納
- 29. 明示的に構造体に項目を格納する
- 30. 構造体配列に値を格納する
ありがとうRob!正確に私が探していたもの:非保持辞書。 –
もう一つのオプションは、CFDataオブジェクトを介して構造体を渡すことです。 APIはこの種の使用法にはあまり適していません。NSValueが提供するエンディアン認識の面を失うことになりますが、他にも多くの欠点はありません。ある意味では、NSValueとNSDataは両方とも「生のバイト」のコピーを格納します。 NSValueは余分なメタデータを追跡します。これは、多くの目的、つまりCFコレクションクラスを介してメモリ内の構造体を渡すことはおそらく必要ありません。だからあなたの値の型をNSValueのカテゴリとして追加するのではなく、代わりにCFDataRefに/からいくつかのヘルパー関数を書くことができますか? – natevw