Использование индекса структуры подуровня с Boost multi_index

Я пытаюсь решить проблему, используя Boost multi_index. Если у меня есть 2 структуры следующим образом:

struct MyStruct1
{
    int x;
    int y;
};

struct MyStruct2
{
   int a;
   MyStruct1 b;
};

Как мне определить индекс, используя MyStruct2::b.x? Это возможно?

пытался что-то вроде:

struct xIndex{};

typedef multi_index_container<
    MyStruct2,
    indexed_by<
        ordered_unique<
            tag<xIndex>,
            member<MyStruct2, int, &MyStruct2::a::x>
        >
    >
> MyContainer;

Но это не работает.

Спасибо за любую информацию/совет.


person psunittany    schedule 29.08.2014    source источник


Ответы (1)


Есть несколько способов сделать это, но все они требуют написания шаблонного кода. Самый простой — предоставить определяемый пользователем экстрактор ключей. :

struct MyStruct2XExtractor
{
  typedef int result_type;

  int operator()(const MyStruct2& m)const
  {
    return m.b.x;
  }
};

...

typedef multi_index_container<
    MyStruct2,
    indexed_by<
        ordered_unique<
            tag<xIndex>,
            MyStruct2XExtractor
        >
    >
> MyContainer;
person Joaquín M López Muñoz    schedule 31.08.2014
comment
Благодарю вас! Это то, что мне было нужно - person psunittany; 02.09.2014