увеличить многоиндексный контейнер зависимой от шаблона структуры в шаблонном классе

Я хочу мульти-индексный контейнер в классе, который зависит от шаблонно-зависимого класса в классе.
Звучит сложно, вот код:

#include <boost/unordered_map.hpp>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/random_access_index.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/member.hpp>

template <typename Type>
class myDataContainer{
public:
struct DataStruct{
double t;
std::vector<Type> data;
};

// indices structs
struct TagTime{};
struct TagOrdered{};

typedef boost::multi_index::multi_index_container<
DataStruct,
boost::multi_index::indexed_by<
boost::multi_index::hashed_unique<boost::multi_index::tag<TagTime>,     boost::multi_index::member<DataStruct, double, &DataStruct::t> >,
boost::multi_index::ordered_unique<boost::multi_index::tag<TagOrdered>,     boost::multi_index::member<DataStruct, double, &DataStruct::t> > // this index represents     timestamp incremental order
>
> InnerDataContainer;
typedef typename boost::multi_index::index<InnerDataContainer,TagTime>::type timestamp_view;
typedef typename boost::multi_index::index<InnerDataContainer,TagOrdered>::type ordered_view;

InnerDataContainer dataContainer;
void begin(){
ordered_view& ordView = dataContainer.get<TagOrdered>();
ordView.begin();
}

};

int main(int argc, char *argv[])
{
myDataContainer<float> data;
myDataContainer<float>::ordered_view& ordView = data.dataContainer.get<TagOrder>();
ordView.begin();
}

Без myDataContainer::begin() Функция этого кода компилируется, но с myDataContainer::begin() Я получаю следующую ошибку:

main.cpp: In member function 'void myDataContainer<Type>::begin()':
main.cpp:134:66: error: expected primary-expression before '>' token
main.cpp:134:68: error: expected primary-expression before ')' token

Я что-то пропустил? Это ошибка в boost или это невозможно?

заранее спасибо
Veio

5

Решение

Поскольку dataContainer зависит от параметров шаблона, вам необходимо

ordered_view& ordView = dataContainer.template get<TagOrdered>();

В main() Вы используете конкретную специализацию, поэтому больше нет зависимых выражений.

5

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

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