2013-05-04 121 views
2

我有一個向量的元組簡單的類模板:創建這個函數模板

template <typename... T> 
struct TupleOfVectors { 
    std::tuple<std::vector<T>...> tuple; 
}; 

我可以這樣使用它:

TupleOfVectors<double, std::string> tuple; 

auto vec0 = std::get<0>(tuple.tuple); 
vec0.push_back(1.2); 

auto vec1 = std::get<1>(tuple.tuple); 
vec1.push_back("foo"); 

我想封裝成類模板本身這一點。這是我很想用我的類模板:

tuple.vec<0>.push_back(1.2); 
tuple.vec<1>.push_back("foo"); 

如何制定這樣一個vec()模板成員函數?

回答

10
template <typename... Ts> 
struct TupleOfVectors { 
    std::tuple<std::vector<Ts>...> tuple; 

    template< size_t N > 
    auto vec() -> decltype(std::get<N>(tuple)) { 
     return std::get<N>(tuple); 
    } 

}; 

TupleOfVectors<int, short, double, float> t; 

t.vec<3>().push_back(3.14f); 
+0

那裏有很多C++ 11的好東西! – 7cows 2013-05-04 22:04:45