//------------------------------------------------------------------------------
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”: nie ma dostępu do prywatnych członka zadeklarowana w klasie „A”Dlaczego C++ 11 nie przenosi niezideikowalnego funktora do funkcji std ::?
Wydaje się, że kiedy coś uchwycić poprzez odniesienie lub const
mogę zrobić non-copyable lambda. Jednak kiedy to zrobię, to faktycznie działa, aby dać to std::function
.
Jako [obejście] (https://gist.github.com/vmilea/5815777) można umieścić adapter nadający się do kopiowania między std :: function i functor. Adapter ma konstruktor kopiowania obojętnego (przesuń na kopię) i zgłasza, jeśli został skopiowany. –