用decltype获取auto&&参数类型以std::forward¶
对于泛型 lambda 同样可以使用完美转发:
//@ 传入参数是auto,类型未知,std::forward的模板参数应该是什么?
auto f = [](auto&& x) { return g(std::forward< ? ? ? >(x)); };
此时可以用 decltype 判断传入的实参是左值还是右值
- 如果传递给
auto&&的实参是左值,则x为左值引用类型,decltype(x)为左值引用类型。 - 如果传递给
auto&&的实参是右值,则x为右值引用类型,decltype(x)为右值引用类型。
auto f = [](auto&& x) { return g(std::forward<decltype(x)>(x)); };
转发任意数量的实参:
auto f = [](auto&&... args) {
return g(std::forward<decltype(args)>(args)...);
};