【发布时间】:2018-08-12 16:26:30
【问题描述】:
我试图返回除@987654322@ 中最后一个元素之外的所有元素,如果元组中只有两个元素,则返回第一个元素。由于std::tuple 有很多编译时设施,所以双返回类型应该是可行的。到目前为止,这是我所拥有的:
// Behavior
// init(std::make_tuple(1,2)) = 1
// init(std::make_tuple(1,2,3)) = (1,2)
// First case
template<class T1, class T2>
inline static T1 init(Tuple<T1, T2> t) {
return std::get<0>(t);
}
// Second case
template<class ...Args, class S = std::make_index_sequence<sizeof...(Args) - 1>>
inline static decltype(auto) init(Tuple<Args...> t) {
return std::apply([](const auto &item...) {
return std::tuple_cat(std::make_tuple(std::get<S>) ... std::tuple<>);
}, t);
}
如果我能以 c++17 友好的方式做到这一点,那就太好了。上述实现出现以下错误:
./tuple.cpp:36:55: 错误:包扩展不包含任何未扩展的参数包
返回 std::tuple_cat(std::make_tuple(std::get) ... std::tuple);~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
产生 1 个错误。
【问题讨论】:
-
你想返回一个包含除最后一个之外的所有元素的元组吗?
-
std::ignore 我猜可能对你有帮助。