0

C++ STL のコンテナー クラスの 1 つに少し似た動作をするプロジェクト用に取り組んでいるテンプレート クラスがありますが、それを安全に実装する方法を見つけるのに問題があります。

背景:エンティティ システム フレームワークである Artemis という既存のプロジェクトを Java から C++ に移植しようとしています。基本的に ArrayList である bag と呼ばれるクラスがありますが、そこに含まれるアイテムは配列に格納され、アクセスを高速化するためにインデックスで検索されます。格納された要素はほとんどの場合、独自のインデックスを格納しますが、それはそれほど重要ではありません。

問題: T (テンプレート型) の配列を含むテンプレート クラスがあります。私の問題は、T 要素の返品に関するものです。私のT &Get(int index)関数では、指定されたインデックスの要素への参照を返したいのですが、その要素が存在しない場合の対処方法がわかりません。null のようなものを返したかったのですが、Tの型がポインターであることが保証されていないため、それは機能しません。コンテナー クラスにT*s を含めることもできますが、その場合、int および非ポインター ( std::string) の奇妙な問題/複雑な問題や、一部のアイテムが範囲外になることがあります (値をコピーしない限り?)。

組み込みの STL コンテナーがこれらの問題に対処する方法を知っている人はいますか? 私が求めていることを十分に明確にしていただければ幸いです...

リンク:

移植しているファイル

前もって感謝します。

4

1 に答える 1

4

標準の連想コンテナ ( map、など) は、構文が使用されるとunordered_mapデフォルトで構築されたオブジェクトを作成し、それへの参照を返します。[]

それを行うか、要素が存在しないときに例外をスローすることができます。標準の連想コンテナには、atこれを行う機能があります。

もう 1 つの方法は、要素への参照ではなく、要素への反復子findを返す標準コンテナーの関数のような関数を使用することです。要素が存在しない場合、返される反復子は と等しくなります。このようにして、例外を使用せずに要素が存在するかどうかを実際に確認できます。end(container)

于 2012-09-28T03:41:08.540 に答える