当将推导类型作为右值引用传递时,我获得了通用引用功能,并且可以实现完美转发,如下所示:
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
}
现在显然由于 t 未被捕获而无法编译。我的问题是:如何捕获它,以便捕获的值将是 T 推导出来的值?
使用新的通用 lambda 捕获可以实现这一点吗?如果……怎么办?
[t = std::forward<T>(t)] ?
我仍然不太了解新捕获初始化程序的机制......
您可以在 C++11 中“通过通用引用捕获”,因为模板参数的类型T
可用于 lambda 函数 (Coliru 的可怕的实时代码示例 http://coliru.stacked-crooked.com/a/b575f38adaf76bce):
template <typename T>
void func(T&& t) {
other_func([&t](int v) {
return std::forward<T>(t) + v;
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)