2013-05-04 2 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