Multi_index容器boost查看初始化

时间:2017-12-22 07:27:21

标签: c++11 boost boost-multi-index

class ProcessMaterial
{
   typedef bip::allocator<OrderReceievedT, bip::managed_shared_memory::segment_manager> ShmemAllocator;

   typedef bmi::multi_index_container<OrderReceievedT,
        bmi::indexed_by<
        bmi::ordered_unique<bmi::tag<struct NewKey>,
            bmi::composite_key<OrderReceievedT,
            bmi::member<OrderReceievedT, int, &OrderReceievedT::partionID>,
            bmi::member<OrderReceievedT, uint32_t, &OrderReceievedT::MarketSegmentID>,
            bmi::member<OrderReceievedT, uint64_t, &OrderReceievedT::SecurityID>,
            bmi::member<OrderReceievedT, uint64_t, &OrderReceievedT::TradeTimePeriority>,
            bmi::member<OrderReceievedT, uint64_t, &OrderReceievedT::Quantity>
            >>>, ShmemAllocator>
            OrderBookT;
   typedef bmi::nth_index<OrderBookT, 0>::type CompositeKeyOrderViewT;

   bip::offset_ptr<OrderBookT> buyOrderBook[MaxNumStream];
   CompositeKeyOrderViewT& orderView[MaxNumStream];

}

我在orderView Constructor中遇到问题。 我尝试过的事情。

  1. 将视图发送到shared_ptr<CompositeKeyOrderViewT&>

  2. Simple Obeject。

  3. 简单指针。

  4. 我有多个OrderBook[10]OrderView[10]。 最终我想要这样----&gt;

    OrderView[2]->insert(OrderRecieved); 
    

1 个答案:

答案 0 :(得分:1)

C ++不允许引用数组。你的编译器会告诉你(http://coliru.stacked-crooked.com/a/1df5574a52fafa88)¹。

你可能使用引用:

std::array<CompositeKeyOrderViewT, 10> orderView;

创建临时“索引”的常用方法是使用reference_wrapper(请参阅BMI文档中的示例:http://www.boost.org/doc/libs/1_66_0/libs/multi_index/doc/examples.html#example11

¹我为什么要输入&gt; 50%的代码是否完整?