Reputation: 5034
I have a simple class template with tuples of vectors:
template <typename... T>
struct TupleOfVectors {
std::tuple<std::vector<T>...> tuple;
};
I can use it like this:
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");
I want to encapsulate this into the class template itself. This is how I'd really like to use my class template:
tuple.vec<0>.push_back(1.2);
tuple.vec<1>.push_back("foo");
How do I develop such a vec()
template member function?
Upvotes: 2
Views: 142
Reputation: 5684
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 );
Upvotes: 10