c++ - 在 C++20 中使用 auto 转发参数?
问题描述
在 C++20 中,以下函数是否格式错误:
void f(auto&&... args) { /*...*/ }
并且,如果不是格式错误,有没有办法以与以下函数完全相同的方式在正文中转发参数(不修改签名):
template<typename... Args>
void f(Args&&... args) {
g(std::forward<Args>(args)...);
}
如果是这样,应该用什么代替Args
作为模板参数的使用std::forward
?
解决方案
您可以在 的帮助下做到这一点decltype
。
void f(auto&&... args) {
g(std::forward<decltype(args)>(args)...);
}
当被传递左值时,decltype(args)
产生 type T&
,std::forward
会将它们作为左值转发。当被传递 rvalues 时,decltype(args)
产生 type T&&
,std::forward
会将它们作为 rvalues 转发。请注意,它与模板版本略有不同,其中T
指定为std::forward
;的模板参数。两种情况的效果(即作为右值转发)是相同的。
推荐阅读
- javascript - 为什么我不能从 Google AppScript for Sheets 的侧边栏中调用服务器函数?
- asp.net-mvc-3 - .Net Core 3 HtmlGrid WithFooter 不是一个选项
- c# - Using mocked objects (Moq) with methods that use reflection in C#?
- javascript - Stripe Payments not showing correctly every time
- sql - 如何在 SQL Server 中使用左外连接?
- r - Assigning numerical value to answers to calculate results in Shiny
- javascript - useSelector 或 useContext
- openssl - 使用 OpenSSL 将 .cer 和 .key 文件转换为 .pfx 文件
- python - Running Selenium on AWS Juypter Notebook Instance - Errors
- java - Spring boot starter security - missing RsaKeyConverters