【发布时间】:2021-05-25 22:45:20
【问题描述】:
#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 函数工作原理的理解上的差距吗?有没有办法让它按原样工作,还是我需要编写一个全新的函数?
【问题讨论】:
-
std::get需要一个在编译时已知的索引。函数参数永远不会是 constexpr,并且不能用于需要常量表达式的地方。
标签: c++ parameter-pack