init boost::可选的不可复制对象

2024-01-04

我应该做什么来初始化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(使用前将#替换为@)

init boost::可选的不可复制对象 的相关文章

随机推荐