【发布时间】:2017-05-12 15:54:26
【问题描述】:
我正在尝试制作一个可调用的对象,它本质上在内部有一个绑定的unique_ptr。我读过How to capture a unique_ptr into a lambda expression?
但我无法进一步传递 lambda。下面的代码编译失败,表明正在复制unique_ptr。我不太明白为什么它会尝试复制unique_ptr。
#include <iostream>
#include <memory>
#include <functional>
using namespace std;
void f(std::function<void(int)> unary) {
unary(42);
unary(1337);
}
struct A{
void woof(int i) {cout<< "woof " << i << "\n";}
};
int main(){
auto another_unique = make_unique<A>();
auto bound_p = [ p = move(another_unique) ] (int i) {p->woof(i);};
bound_p(5);
f( bound_p ); // does not compute
}
我还尝试在对 f 的调用中定义 lambda inline,以便它成为一个临时对象,并且可以移动到 f 中。但是错误是一样的。
是否可以将此类对象绑定/包装到可调用对象中并传递它们?
我的用例取决于unique_ptr,但我怀疑任何带有已删除副本 c'tor 的对象都会出现同样的问题。如果我错了,请告诉我或将主题编辑为不那么笼统。
【问题讨论】:
标签: c++ lambda c++14 unique-ptr