multi_index_container
基本的に次のようなものがあります。
struct MyStruct {
int a, b, c;
};
struct Tag1;
struct Tag2;
typedef multi_index_container<
MyStruct,
indexed_by<
hashed_non_unique<
tag<Tag1>,
composite_key<
MyStruct,
member<MyStruct, int, &MyStruct::a>,
member<MyStruct, int, &MyStruct::b>
>
>,
hashed_non_unique<
tag<Tag2>,
composite_key<
MyStruct,
member<MyStruct, int, &MyStruct::a>,
member<MyStruct, int, &MyStruct::b>,
member<MyStruct, int, &MyStruct::c>
>
>
>
> MyContainer;
このようなコンテナーをインスタンス化し、そのインデックスを次のように使用します。
MyContainer c;
MyContainer::index<Tag1>::type& index1 = c.get<Tag1>;
MyContainer::index<Tag2>::type& index2 = c.get<Tag2>;
equal_range
ここで、実行時に、2 つのインデックスのいずれかを実行したいと考えています。実際に使用されるインデックスは、現在の構成によって異なります。私が達成しようとしているのは、次のようなものです。
// Search in container
SomeType range;
if (useIndex1)
range = index1.equal_range(...);
else
range = index2.equal_range(...);
// Loop through range
for (auto i = range.first; i != range.second; ++i)
...
これを行う方法がわかりません。結局のところ、 の戻り値の型index1.equal_range
は、 によって返されるものとは異なる反復子のペアですindex2.equal_range
。2つに共通のベースタイプはありますか? 私の例を見ると、どのSomeType
ように見える必要がありますか? for
使用される可能性のあるすべてのインデックスに対して、コード内でループを繰り返したくありません。