Повышение Multi Index Идентичность индекса

Я пытаюсь сделать некоторый класс-оболочку для multi_index_container.

В основном я хочу экспортировать только те операции:

  1. Вставить элемент
  2. Удалить элемент (для данного элемента)
  3. Получить элемент по ключу

Следующий код определен:

    typedef boost::multi_index::multi_index_container<
SR, boost::multi_index::indexed_by<
boost::multi_index::ordered_unique<boost::multi_index::tag<SR::ByIdentity>,boost::multi_index::identity<SR> >
, boost::multi_index::ordered_unique< boost::multi_index::tag<ByName>,boost::multi_index::const_mem_fun<SR,const std::string&
, &SR::GetName> >
, boost::multi_index::ordered_non_unique<boost::multi_index::tag<ByID>,boost::multi_index::const_mem_fun<SR, ID
, &SR::GetID> >
>
> SRs;

где:

SR::ByIdentity внутренняя пустая структура

ByName а также ByID предварительно определены пустые структуры.

это функции, определенные в SR

ID SetID(ID ID);
ID GetID() const;

void SetName(const std::string& name);
const std::string& GetName() const;

и это код для вставки, удаления и получения

    bool Insert(ElementType val)
{
return m_container.insert(val).second;
}

void Remove(ElementType val)
{
iterator It = m_container.get<ByIdenetity>().find(val);
if (It != m_container.end())
{
m_container.erase(It);
}
}

template<typename Iterator> const_iterator Get(typename Iterator::mtype val) const
{
typename Iterator::iterator::const_iterator It = m_container.get<typename Iterator::index>().find(val);
return It;
}

где typename Iterator определяется как один из

    struct IdentityIterator
{
typedef ByIdentity index;
typedef SR mtype;
typedef SRs::index<ByIdentity>::type iterator;
} ;struct NameIterator
{
typedef ByName index;
typedef const std::string& mtype;
typedef SRs::index<ByName>::type iterator;
} ;struct NameIterator
{
typedef ByID index;
typedef ID mtype;
typedef SRs::index<ByID>::type iterator;
} ;

Я получаю следующую ошибку компиляции:

        In member function ?€˜typename ContainerType::const_iterator ns1::ContainerWrapper<ContainerType>::get(typename Iterator::mtype) const [with Iterator = ns2::NameIter, ContainerType = boost::multi_index::multi_index_container<ns2::SR, boost::multi_index::indexed_by<boost::multi_index::ordered_non_unique<boost::multi_index::tag<ns2::ByIdentity, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::identity<ns2::SR>, mpl_::na>, boost::multi_index::ordered_unique<boost::multi_index::tag<ns2::ByName, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::const_mem_fun<ns2::SR, const std::string&, &ns2::SR::GetName>, mpl_::na>, boost::multi_index::ordered_non_unique<boost::multi_index::tag<ns2::ByID, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::const_mem_fun<ns2::SR, int, &ns2::SR::GetRoleID>, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<ns2::SR> >]?€™:
ns3/testFile.cpp:509:   instantiated from here
../ns1/ContainerWrapper.h:114: error: conversion from ?€˜boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns2::SR, std::allocator<ns2::SR> > > > >?€™ to non-scalar type ?€˜boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns2::SR, std::allocator<ns2::SR> > > > > >?€™ requested

Это не происходит, когда я удаляю boost::multi_index::ordered_unique<boost::multi_index::tag<SR::ByIdentity>,boost::multi_index::identity<SR> >

любая идея?

0

Решение

Ваш Get функция-член возвращает некоторые const_iterator когда он должен вернуться Iterator::iterator::const_iterator,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]