template<typename T> void doSomething(T&& mStuff)
{
auto lambda([&mStuff]{ doStuff(std::forward<T>(mStuff)); });
lambda();
}
Run Code Online (Sandbox Code Playgroud)
mStuff
使用&mStuff
语法捕获完美转发的变量是否正确?
或者是否有针对完美转发变量的特定捕获语法?
编辑:如果完美转发的变量是参数包怎么办?
我研究了泛型lambdas,稍微修改了这个例子,所以我的lambda应该捕获上层lambda的可变参数包.所以基本上给予上层lambda的是(auto&&...)
- 应该以某种方式在[=]
块中捕获.
(完美的转发是另一个问题,我很好奇这可能在这里吗?)
#include <iostream>
#include<type_traits>
#include<utility>
// base case
void doPrint(std::ostream& out) {}
template <typename T, typename... Args>
void doPrint(std::ostream& out, T && t, Args && ... args)
{
out << t << " "; // add comma here, see below
doPrint(out, std::forward<Args&&>(args)...);
}
int main()
{
// generic lambda, operator() is a template with one parameter
auto vglambda = [](auto printer) {
return [=](auto&&... ts) // generic lambda, ts is a parameter pack
{ …
Run Code Online (Sandbox Code Playgroud)