2013-01-30 5 views
5

Ich möchte einen Multi-Index-Container in einer Klasse, die auf einer Vorlage abhängigen Klasse in der Klasse abhängt. Klingt kompliziert, hier ist der Code:Boost Multi-Index-Container von Template-abhängigen Struktur in Template-Klasse

#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(); 
} 

Ohne die myDataContainer::begin() Funktion dieser Code kompiliert, aber mit dem myDataContainer::begin() ich folgende Fehlermeldung erhalten:

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 

bin ich etwas fehlt? Ist das ein Fehler im Boost-oder ist es nicht möglich? `

Vielen Dank im Voraus veio

Antwort

5

Da Datacontainer Template-Parameter abhängig sind, was Sie brauchen

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

In main() Sie bestimmt eine Spezialisierung verwenden, es gibt also keine abhängigen Ausdrücke mehr.

+0

uh, du rockst, das funktioniert. Vielen Dank! – veio