2011-08-10 92 views
4

我正在試驗Boost.Range和Boost Tuple。如果我有一個範圍元組,我怎樣才能輸入一個元組或者相應的元素值?爲了把這個另一種方式,我該怎麼落實到位/*?*/這裏:Boost.Range的C++元組 - 獲取元素類型的元組?

typedef boost::tuples::tuple<std::vector<int>&, char[]> TupleOfRanges; 
typedef /*?*/ TupleOfElements; 

我可以自己動手完成這一點,當然,我會寫:

typedef boost::tuples::tuple<int, char> TupleOfElements; 

甚至:

typedef typename boost::tuples::element<0, TupleOfRanges>::type Range0; 
typedef typename boost::tuples::element<1, TupleOfRanges>::type Range1; 
typedef typename boost::range_iterator<Range0>::type Iterator0; 
typedef typename boost::range_iterator<Range1>::type Iterator1; 
typedef typename boost::iterator_value<Iterator0>::type Value0; 
typedef typename boost::iterator_value<Iterator1>::type Value1; 

typedef boost::tuples::tuple<Value0, Value1> TupleOfElements; 

但我認爲應該可以直接從派生TupleOfElements,不管元組大小如何。任何想法歡迎!

編輯:這似乎工作,感謝@ltjax:

struct GetIteratorType 
{ 
    template <class Range> 
    struct apply 
    { 
     typedef typename boost::range_iterator<Range>::type type; 
    }; 
}; 
typedef boost::mpl::transform<TupleOfRanges, GetIteratorType> TupleOfIterators; 

struct GetElementType 
{ 
    template <class Iterator> 
    struct apply 
    { 
     typedef typename boost::iterator_value<Iterator>::type type; 
    }; 
}; 
typedef boost::mpl::transform<TupleOfIterators, GetElementType> TupleOfElements; 

回答