创建这个函数模板

Creating this function template

本文关键字:函数模板 创建      更新时间:2023-10-16

我有一个简单的类模板与向量元组:

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()模板成员函数?

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 );