为什么std :: function <boost :: any()=“”>在这种情况下无法工作?</boost :: any>

时间:2014-08-07 18:39:12

标签: c++ c++11 boost

我遇到了一种需要这种功能的情况:

MoveOnly createMoveOnly();

存储在这里:

std::function<boost::any ()> factory = &createMoveOnly;

这应该有效,AFAIK,因为MoveOnly可转换为boost::any

使用boost 1.55支持boost.any的移动语义,它不起作用。它会在MoveOnly的持有者内部尝试在boost::any内部使用已删除的复制构造函数时触发错误。但正确选择了Boost.Any的顶级构造函数(它使用模板化的ValueType&amp;&amp;&amp;&to; towards parameters)。

问题可能出在std::function

任何提示?

1 个答案:

答案 0 :(得分:6)

我认为boost::any需要复制构造函数和赋值运算符。文档似乎表明了这一点:

  

由于值的重点在于其状态而非其身份,因此可以复制值并通常彼此分配,需要公共拷贝构造函数和公共赋值运算符的显式或隐式定义。值通常存在于其他范围内,即在对象或块内,而不是在堆上。因此,值通常作为变量或通过引用直接传递和操作,但不作为强调身份和间接的指针。

http://www.boost.org/doc/libs/1_55_0/doc/html/any/reference.html