假设我有一个仿函数s,它是不可复制但可移动的,我怎样才能将它存储在std :: function中?即,如何编译以下代码? (使用gcc 4.6)
#include <functional>
#include <iostream>
struct S
{
S() = default;
S(S const&) = delete;
S& operator=(S const&) = delete;
S(S&&) { }
void operator()() { }
};
std::function<void()> func;
void make_func()
{
S s;
func = std::bind(std::move(s)); // This won't compile
}
int main()
{
make_func();
}
答案 0 :(得分:2)
据我了解标准,std::function
应该是可复制的。因此,您无法直接实现您想要的目标。
尽管如此,你可以使用一些自定义包装器。它会是这样的:
std::shared_ptr
到实际的仿函数; shared_ptr
copy-ctor / destructor处理; operator()
取消引用指向真实仿函数的智能指针,并委托给operator()
。