如何解决从可变参数中只取一个值
我想通过这个简单的例子来提问:我如何从可变参数包中获取最后一个值和 print(1,2,3.14)
来调用 print(3,14)
?
void print()
{
cout<<"--empty--";
}
void print(x)
{
std::cout<<"Last Value from variadic pac--" << x;
}
template <typename T,typename... Types>
void print(T var1,Types... var2)
{
int x = // last value from variadic pac : 3.14
print(x) // 3.14
}
int main()
{
print(1,3.14);
return 0;
}
解决方法
使用std::tuple
,您可能会
template <typename T,typename... Types>
void print(T var1,Types... var2)
{
auto x = std::get<sizeof...(Types) - 1>(std::tie(var2...));
print(x); // 3.14
}
,
尽管您将问题标记为 c++14,但我认为值得注意的是,如果使用折叠表达式和 constexpr,c++17 解决方案要简单得多:
整体:
template <typename... Types>
void print(Types... args)
{
if constexpr (sizeof...(Types) == 0)
std::cout << "Empty";
else
std::cout << (args,...);
}
折叠扩展为使用逗号运算符,它计算每个参数并丢弃结果,直到达到最后一个。最后一项的计算结果成为整个表达式的值,并被打印出来。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。