如何从参数包中获取元素?
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_t
和 int
)它不起作用。
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;
}
我会留下这个问题,以防其他人遇到类似问题。
#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_t
和 int
)它不起作用。
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;
}
我会留下这个问题,以防其他人遇到类似问题。