我遇到了一种需要这种功能的情况:
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
。
任何提示?
答案 0 :(得分:6)
我认为boost::any
需要复制构造函数和赋值运算符。文档似乎表明了这一点:
由于值的重点在于其状态而非其身份,因此可以复制值并通常彼此分配,需要公共拷贝构造函数和公共赋值运算符的显式或隐式定义。值通常存在于其他范围内,即在对象或块内,而不是在堆上。因此,值通常作为变量或通过引用直接传递和操作,但不作为强调身份和间接的指针。
http://www.boost.org/doc/libs/1_55_0/doc/html/any/reference.html