假设我有一个元组,例如using BaseTuple = std::tuple<int, double, string>;
,我想从给定的可变参数索引序列中定义新的类型,以及从BaseTuple转换到BaseTuple的方法。例如,CustomTuple<0,1>应该从tuple<int,double>派生。
using BaseTuple = tuple<int, double, string>;
template <size_t... I>
struct CustomTuple: public tuple<tuple_element_t<I, BaseTuple>...>{
using tuple<tuple_element_t<I, BaseTuple>...>::tuple;
static CustomTuple fromBaseTuple(const BaseTuple& key){
return {get<I>(key)...};
};
BaseTuple toBaseTuple(){
BaseTuple t;
((get<tuple_element_t<I, BaseTuple>>(t) = get<tuple_element_t<I, BaseTuple>>(t)), ...);
return t;
}
};
字符串
如果tuple有唯一的类型,上面的代码就可以工作,但是我想知道是否有任何方法可以处理重复的类型。我找不到一种方法来用它的索引来重复I.。
2条答案
按热度按时间njthzxwz1#
沿着这些线的东西:
字符串
Demo
cetgtptt2#
您可以使用
std::apply
,从而避免查找每个对应元素的需要:字符串
Try it on godbolt.org的