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

问题描述

#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 时(我在 size_t 的参数中同时尝试了 intgetParameterPackVals),但它不起作用。

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,5.0) << std::endl;
    return 0;
}

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