【发布时间】:2014-11-26 15:29:17
【问题描述】:
是否可以根据编译时信息有条件地选择 lambda 的捕获方法?比如……
auto monad = [](auto && captive) {
return [(?)captive = std::forward<decltype(captive)>(captive)](auto && a) {
return 1;
};
};
如果decltype(captive) 是std::reference_wrapper,我希望通过引用捕获,其他所有内容都按值捕获。
【问题讨论】:
-
reference_wrapper的重点不是就像引用一样,只是它可以按值传递而没有问题吗?那么为什么 that 类型是您要通过引用捕获的类型?仅按价值捕获所有内容有什么问题? -
@hvd 我不想通过引用捕获
reference_wrapper,我想通过引用捕获它持有的引用。引用包装器最好是一个 like 引用,但由于调用运算符(又名“.”运算符)不能重载,所以它最终会非常悲惨地失败。 -
感谢您的澄清。这更有意义。所以你不想通过引用捕获
captive,如果它是reference_wrapper,你想通过引用捕获captive.get(),对吧? -
@hvd,是的,完全正确。我应该编辑这个问题,因为我没有说得很清楚
-
@pat 被称为“operator-dot”,当我阅读“调用运算符”时,我以为你的意思是函数调用运算符,
operator()