如何从参数包中获取元素?

How to get element from parameter pack?

#include <iostream>
#include <tuple>
#include <utility>

template <typename... T>
decltype(auto) getParameterPackVals(T&&... Args) noexcept {
    return std::get<1>(std::forward_as_tuple(std::forward<T>(Args)...));
}

int main() {
    std::cout << getParameterPackVals(2, 1.0, 2.0, 3.0, 4.0, 5.0) << std::endl;
    //print(1.0, "Hello", "This", "is", "An", "Honour");
    return 0;
}

这是我当前有效的代码,使用 1 作为变量的占位符。虽然当我用变量替换 1 时(我在 getParameterPackVals 的参数中尝试了 size_tint)它不起作用。

template <size_t V, typename... T>
decltype(auto) getParameterPackVals(V n, T&&... Args){
    return std::get<n>(std::forward_as_tuple(std::forward<T>(Args)...));
}

这是我对 std::get 函数工作原理的理解上的差距吗?有没有办法让它按原样工作,还是我需要编写一个全新的函数?

哇,这是我第一次自己解决!

因此,在集思广益时,我记得如果我将模板参数命名为 size_t V,我可以在调用参数时将其与 <V> 一起传递。所以我从函数参数中取出 V n 并将函数称为 getParameterPackVals<2>(1.0, 2.0, 3.0, 4.0, 5.0)。现在的最终代码是:

#include <iostream>
#include <tuple>
#include <utility>

template <size_t V, typename... T>
decltype(auto) getParameterPackVals(T&&... Args) noexcept{
    return std::get<V>(std::forward_as_tuple(std::forward<T>(Args)...));
}


int main() {
    std::cout << getParameterPackVals<2>(1.0, 2.0, 3.0, 4.0, 5.0) << std::endl;
    return 0;
}

我会留下这个问题,以防其他人遇到类似问题。