четверг, 25 сентября 2008 г.

Как раскрыть multi_index iterator

При отладке бывает полезно посмотреть на объект, который скрывается за итератором контейнера multi_index библиотеки boost. В ответе ниже предполагается тип объекта CSource, а экземпляр итератора называется src_iterator:
(CSource*)((((*(boost::multi_index::detail::pod_value_holder<CSource>*)
(&(*(boost::multi_index::detail::index_node_base<CSource,std::allocator<CSource> >*)
(&(*(boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<CSource,std::allocator<CSource> > >*)
(&*((src_iterator).node)))))))).space).data_).buf
Эту строку можно вставлять, например, в окно Watch отладчика Visual Studio.

UPD: Одной строкой (для копирования):
(CSource*)((((*(boost::multi_index::detail::pod_value_holder<CSource>*)(&(*(boost::multi_index::detail::index_node_base<CSource,std::allocator<CSource> >*)(&(*(boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<CSource,std::allocator<CSource> > >*)(&*((src_iterator).node)))))))).space).data_).buf

Комментировать в ВКонтакте