【发布时间】:2012-07-30 21:10:00
【问题描述】:
//------------------------------------------------------------------------------
struct A
{
A(){}
A(A&&){}
A& operator=(A&&){return *this;}
void operator()(){}
private:
A(const A&);
A& operator=(const A&);
int x;
};
//------------------------------------------------------------------------------
int main()
{
A a;
std::function<void()> func(std::move(a));
}
'A::A' : 无法访问在类 'A' 中声明的私有成员
似乎当我通过引用或const 捕获某些东西时,我可以制作一个不可复制的 lambda。但是,当我这样做时,它实际上可以将其提供给std::function。
【问题讨论】:
-
作为workaround,您可以在 std::function 和仿函数之间放置一个可复制的适配器。适配器有一个虚拟(复制时移动)复制构造函数,如果复制则抛出。