0

我正在尝试使用 Boost multi_index 解决问题。如果我有2个结构如下:

struct MyStruct1
{
    int x;
    int y;
};

struct MyStruct2
{
   int a;
   MyStruct1 b;
};

如何使用 MyStruct2::bx 定义索引?这可能吗?

正在尝试类似的东西:

struct xIndex{};

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

但这不起作用。

感谢您提供任何信息/建议。

4

1 回答 1

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;
于 2014-08-31T17:34:26.380 回答