如何将值元组中的相应值附加到相同类型的向量元组中
How to append the corresponding value from a tuple of values to a tuple of vectors of the same types?
我有一个数组类的结构
template <typename... Ts>
class soa {
std::tuple<std::vector<Ts>...> vectors;
void push_back(std::tuple<Ts...> values);
}
我希望push_back
将值的元组推送到每种类型的每个对应向量上。我想用index_sequences
做点什么,但我不太确定如何正确地进行包扩展。
这正是我所想的,但扩展不起作用。我应该如何正确地进行扩展?
template <typename... Ts>
class soa {
std::tuple<std::vector<Ts>...> vectors;
template <std::size_t... Is>
void push_back_impl(std::tuple<Ts...> values, std::index_sequence<Is...>) {
// Some kind of pack expansion here
// This doesn't work, but is kinda what I want
//std::get<Is>(vectors).push_back(std::get<Is>(values))...;
}
void push_back(std::tuple<Ts...> values) {
push_back_impl(values, std::index_sequence_for<Ts...>{});
}
};
如果我使用index_sequence
不正确,也请纠正我。元编程让我有点头疼。
Pre-C++17,您可以使用eater
:
template<class... Ts> void eater(Ts... ts) {}
那么功能可以是:
template <std::size_t... Is>
void push_back_impl(std::tuple<Ts...> values, std::index_sequence<Is...>) {
eater((std::get<Is>(vectors).push_back(std::get<Is>(values)), 0)...);
}
在C++17中,只需使用逗号运算符:
template <std::size_t... Is>
void push_back_impl(std::tuple<Ts...> values, std::index_sequence<Is...>) {
(std::get<Is>(vectors).push_back(std::get<Is>(values)),...);
}
相关文章:
- 在C++中,如何通过几种类型从元组中选择多个元素
- 将元组类型扩展为可变参数模板?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 创建派生自可变参数模板包的类型元组
- 枚举元组类型的最佳方法?
- 我无法在用forward_as_tuple创建的元组中按类型访问元素
- Boost.Hana:在 constexpr 上下文中将值元组转换为相应类型的元组
- 将函数应用于元组中的每个元素,将每个元素强制转换为类型包中的不同类型,然后作为参数包传递
- 如何将值元组中的相应值附加到相同类型的向量元组中
- 您自己的类型的结构化绑定,不是结构或元组(通过公共成员函数)
- 如何在编译器时动态获取元组内的变量类型C++?
- 使用对另一个元组不同类型的元素的非常量引用来初始化元组的元素
- 元组中类型的编译时重新排列
- 推断元组的类型
- 表示函数参数的元组的类型表达式
- 可变模板:选择具有适当方法的元组元素类型
- 获取元组元素类型的索引?
- 如何任意对元组的类型进行排序?
- 是否有可能通过重复的std::元组的类型名来获取
- 返回所选类型的元组的类型函数