-1
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];

}

i am having problem initalizing the orderView in Constructor. things I have tried.

  1. Making View to shared_ptr<CompositeKeyOrderViewT&>.

  2. Simple Obeject.

  3. Simple pointer.

I have multiple OrderBook[10], OrderView[10]. ultimately i want like this---->

OrderView[2]->insert(OrderRecieved); 
sehe
  • 374,641
  • 47
  • 450
  • 633
Nespl NS3
  • 52
  • 1
  • 9

1 Answers1

1

C++ doesn't allow arrays of references. Your compiler would have told you (http://coliru.stacked-crooked.com/a/1df5574a52fafa88)¹.

You could probably not use a reference:

std::array<CompositeKeyOrderViewT, 10> orderView;

The usual way to create a temporary "index" is using reference_wrapper (see the samples in the BMI docs: http://www.boost.org/doc/libs/1_66_0/libs/multi_index/doc/examples.html#example11


¹ Why did I have to type up > 50% of the code to make it complete?

sehe
  • 374,641
  • 47
  • 450
  • 633