我对参数包有点陌生,遇到了与超出范围索引相关的问题。为了简化问题,我想访问函数内参数包中的第 n 个元素(比如说第 3 个)。如果函数调用未传递 3 个(或更多)参数,则返回 nullptr。也许有一个递归解决方案可以安全地忽略较少参数的情况?
template <int I, class... Ts>
decltype(auto) get_element(Ts&&... ts) {
return std::get<I>(std::forward_as_tuple(ts...));
}
template <typename... Args>
void foo(Args ... args)
{
auto p = get_element<3>(args...);
}
int main()
{
int a = 1;
foo(a);
return 0;
}
错误 C2338 元组索引超出范围
错误 C2672 'std::get': 找不到匹配的重载函数