Dav*_*vid 18 c++ lambda function c++11
//------------------------------------------------------------------------------
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));
}
Run Code Online (Sandbox Code Playgroud)
'A :: A':无法访问类'A'中声明的私有成员
似乎当我通过引用捕获某些东西时,或者const我可以制作一个不可复制的lambda.但是,当我这样做时,它实际上是为了给它一个std::function.
How*_*ant 21
简短的回答是,C++ 11规范要求你A要CopyConstructible与其一起使用std::function.
很长的答案是存在这个要求,因为std::function在构造函数中擦除了仿函数的类型.为此,std::function必须通过虚函数访问函子的某些成员.这些包括调用运算符,复制构造函数和析构函数.并且由于这些是通过虚拟调用访问的,因此无论您是否实际使用std::function的是复制构造函数,析构函数或调用运算符,它们都会被"使用" .
| 归档时间: |
|
| 查看次数: |
2223 次 |
| 最近记录: |