在如下模板中,如何从另一个更复杂的元组中的元素填充一个元组?
template<typename... Ts>
struct foo {
std::tuple<std::vector<Ts>...> tuple;
foo() {
//populate tuple somehow
//assume that no vector is empty
}
void func() {
std::tuple<Ts...> back_tuple; // = ...
//want to populate with the last elements ".back()" of each vector
//how?
}
};
我找不到任何元组的 push_back 机制,所以我不确定如何使用模板循环技巧来做到这一点。此外,我找不到任何类似模板的 initializer_list 用于不同类型来收集我的值然后传递到新元组中。有什么想法吗?
最佳答案
尝试这样的事情:
std::tuple<std::vector<Ts>...> t;
template <int...> struct Indices {};
template <bool> struct BoolType {};
template <int ...I>
std::tuple<Ts...> back_tuple_aux(BoolType<true>, Indices<I...>)
{
return std::make_tuple(std::get<I>(t).back()...); // !!
}
template <int ...I>
std::tuple<Ts...> back_tuple_aux(BoolType<false>, Indices<I...>)
{
return back_tuple_aux(BoolType<sizeof...(I) + 1 == sizeof...(Ts)>(),
Indices<I..., sizeof...(I)>());
};
std::tuple<Ts...> back_tuple()
{
return back_tuple_aux(BoolType<0 == sizeof...(Ts)>(), Indices<>());
}
(魔法发生在标记为 !!
的行中。)
关于c++ - 用另一个元组中的元素填充一个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17517735/