我应该做什么来初始化boost::optional< T >
如果基础类型T
是非默认可构造的、不可复制/可移动的,但一个实例仍然可以存在?
是否禁止boost::optional
由于任何语义原因,有一些成员函数,例如template< typename... Args > boost::optional< T >::construct(Args && ...args)
,将所有参数传递到就地operator new
完全构造对象(对于非引用类型T
)?变体是具有非成员函数,例如std::make_shared< T >
.
在我看来,我的问题可以通过使用来解决std::unique_ptr
/std::shared_ptr
,但在这种情况下我的问题是:“为什么boost::optional
进度被冻结了吗?”。
boost::optional
可以使用不可复制的类型进行初始化就地工厂 http://www.boost.org/doc/libs/release/libs/optional/doc/html/boost_optional/in_place_factories.html.
具体来说,您可以像这样使用它们:
#include <boost/optional.hpp>
#include <boost/utility/in_place_factory.hpp>
class MyType : private boost::noncopyable
{
public:
MyType(T1 const& arg1, T2 const& arg2);
}
...
boost::optional<MyType> m_var;
...
m_var = boost::in_place(arg1, arg2);
...
在 C++14 中,有一个提议std::make_optional http://en.cppreference.com/w/cpp/utility/optional/make_optional这将是解决这个问题的更好方法。然而,这尚未在 Boost.Optional 中实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)