make_tuple-6ren">
gpt4 book ai didi

C++:获取参数包的头部和尾部

转载 作者:行者123 更新时间:2023-12-03 07:02:06 25 4
gpt4 key购买 nike

如何获取参数包的前 n 个元素?或者最后 n 个元素,或者 [n, n+1, ..., m) 中的一部分元素?例如:

head<3>(1, 2.0f, "three", '4') => make_tuple(1, 2.0f, "three")
tail<2>(1, 2.0f, "three", '4') => make_tuple("three", '4')
slice<1,3>(1, 2.0f, "three", '4') => make_tuple(2.0, "three")
这可以通过 std::tuple、std::integer_sequence 和 std::get 的组合来实现,但我想知道是否有更简单的方法。

最佳答案


template <typename T, typename... J>
T GetFirstPack(T t, J... j) {
return t;
}

template <typename T>
T GetLastPack(T t) {
return t;
}
template <typename T, typename...J>
auto GetLastPack(T t, J... j) {
return GetLastPack(j...);
}

template <typename... T>
void TestFunction(T... t) {
std::cout << GetFirstPack(t...) << std::endl;
std::cout << GetLastPack(t...) << std::endl;
}

int main() {
// your code goes here
TestFunction("first", "second", 10);
return 0;
}
第一个相当简单,最后一个考虑到解包规则有点棘手。您可以使用rhr 来提高效率。

关于C++:获取参数包的头部和尾部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64338273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com