c++ 通过引用捕获

当通过推导类型作为r值引用时,我获得通用的参考功能,可以像这样完成转发:

template <typename T>
void func(T&& t) {
    other_func(std::forward<T>(t));
}

…由于T的派生方式和标准的参考崩溃规则。

现在考虑other_func需要一个函数对象

template <typename T>
void func(T&& t) {
    other_func([](int v) { return t + v; }); // I chose addition for example purposes
}

现在显然这不会被编译,因为没有被捕获。我的问题是:如何捕获它,所以捕获的值将被推断为什么?

这是否可能使用新的通用lambda捕获?如果…怎么样

[t = std::forward<T>(t)] ? 

我仍然没有真正获得新的捕获初始化器的机制…

您可以在C 11中“通过通用参考捕获”,因为模板参数T的类型可用于lambda函数(hideous live code example at Coliru):

template <typename T>
void func(T&& t) {
  other_func([&t](int v) {
    return std::forward<T>(t) + v;
  });
}
http://stackoverflow.com/questions/21238463/capture-by-universal-reference

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c++ 通过引用捕获