【发布时间】:2014-02-09 21:16:09
【问题描述】:
当将推导类型作为 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
}
现在显然这不会编译,因为 t 没有被捕获。我的问题是:我如何捕获它,以便捕获的值将是 T 推导出的任何值?
这是否可以使用新的通用 lambda 捕获?如果……怎么办?
[t = std::forward<T>(t)] ?
我仍然没有真正了解新捕获初始化程序的机制...
【问题讨论】:
-
快速说明:当前接受的名称是转发引用,而不是通用引用