2013-01-30 9 views
5

Voglio un contenitore multi-index in una classe, che dipende da una classe dipendente dalla template nella classe. suona complicato, ecco il codice:boost contenitore multiindice di struct dipendente da template in template-type

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

Senza la funzione myDataContainer::begin() questo codice venga compilato, ma con il myDataContainer::begin() ottengo il seguente errore:

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 

mi sto perdendo qualcosa? Si tratta di un bug in spinta o non è possibile? `

Grazie in anticipo Veio

risposta

5

Perché dataContainer è parametro di template dipendente, è necessario

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

In main() si utilizza specifica una specializzazione, quindi non ci sono più espressioni dipendenti.

+0

uh, rock, funziona. Grazie! – veio

Problemi correlati