Objective-C++プロジェクトの作業を開始します。これは、頑丈な設計を行う前に2つの言語の合成がどのように感じられるかです。私は自動参照カウントがC++とどのように統合されているのか非常に興味があります:NSObjects
のスマートポインタに相当するSTLコンテナ内の保持/解放を正しく処理します(cf. David Chisnallの記事http://www.informit.com/articles/article.aspx?p=1745876&seqNum=3参照)。Objective-C++のキーとしてNSStringを使用する方法std :: map
NSStrings
からC++値への型保証マッピングとしてSTLマップを使用したいと思います。
std::map<NSString*, MyType> mapping
マッピングを宣言できます。このマッピングでは、メモリ管理が適切に処理されます。しかし、それは-[NSString compare:]
の代わりにポインタ比較を使用しているので、NSString
値のセマンティクスに正しく従いません。
ポインタ比較の代わりに文字列比較を使用するSTLマップを取得する最適な方法は何ですか?
std::less<NSString*>
を特化しようとしますか?
std::map<NSString*, MyType, MyCompare>
のような明示的なコンパレータを宣言すべきですか?
NSString*
キーをoperator<
を実装するスマートポインタにラップする必要がありますか?あなたがNSStringのの比較関数を呼び出すカスタム比較対象をしたいと思います
あなたはどのように最もよく定義しますか?望ましい結果のスピードメモリは何ですか? – madmik3
興味深い。私は、objcポインタがARCで簡単に動作することは知らなかった。 Chisnallの記事を見ると、マップ宣言に__weakまたは__strongを追加して機能させる必要があります。さもなければ彼らはPODsであり、動作しません。 (私はそれほど頻繁にやるのではなく、後のことを忘れるので、私はコンパイラの問題に答えることはできません) – smparkes
ポインタが強い場合は、マークする必要はありませんが、彼らが弱い場合にのみ。とにかく、私は明示的コンパレータを使うつもりです。 – bames53