gpt4 book ai didi

c++ - 在 C++20 中使用 auto 转发参数?

转载 作者:行者123 更新时间:2023-12-03 23:40:55 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to perfectly forward `auto&&` in a generic lambda?

(1 个回答)


9 个月前关闭。




在 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) yield 类型 T& , std::forward将它们作为左值转发。当传递右值时, decltype(args) yield 类型 T&& , std::forward将它们作为右值转发。注意与模板版本略有不同,其中 T被指定为 std::forward 的模板参数;两种情况的效果(即作为右值转发)是相同的。

关于c++ - 在 C++20 中使用 auto 转发参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65932678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com