Re: boost::multi_index как что то изменить через iterator
От: MaximE Великобритания  
Дата: 30.10.06 12:00
Оценка:
Аноним wrote:

> struct    Event
> {
>     /*event id*/
>     unsigned int m_nID;
> 
>     /*event priority*/
>     EEventPriority    m_ePrior;
> 
>     /*type of events*/
>     EEventTypes    m_evTypes;
> 
>     /*busy flag*/
>     bool        m_bBusy;
> 
>     /*startup event time*/
>     time_t        m_startup_time;
> 
>     /*expired event time*/
>     time_t        m_expired_time;
> };
> 
> //------------------------------------------------------------------------------
> struct    nID{};
> struct    ePrior{};
> 
> typedef    boost::multi_index::multi_index_container<
>     Event,
>     boost::multi_index::indexed_by
>     <
>         boost::multi_index::ordered_unique
>         <
>             boost::multi_index::tag<nID>, BOOST_MULTI_INDEX_MEMBER(Event, unsigned int, m_nID)
>         >,
>         boost::multi_index::ordered_non_unique
>         <
>             boost::multi_index::tag<ePrior>, BOOST_MULTI_INDEX_MEMBER(Event, EEventPriority, m_ePrior)
>         >
>     >
>> eventsPool;
> 
> typedef eventsPool::index<nID>::type    nID_sub_arr;
> typedef eventsPool::index<ePrior>::type ePrior_sub_arr;
> 
> ePrior_sub_arr::iterator itr = m_eventsPool.get<ePrior>().begin();
> (*itr).m_bBusy = true; //error C3892: 'itr' : you cannot assign to a variable that is const


Если изменяешь член, который не используется как index или его часть, то достаточно:
const_cast<Event&>(*itr).m_bBusy = true;


В противном случае, см. док-цию multi_index<>::modify().

--
Maxim Yegorushkin

No Microsoft product was used in any way to write or send this text.
If you use a Microsoft product to read it, you're doing so at your own risk
Posted via RSDN NNTP Server 2.0
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.