混合助推器的multi_array和可选,C++11 unique_ptr不起作用

Mixing boost's multi_array and optional with C++11 unique_ptr not working

本文关键字:C++11 unique 不起作用 ptr 助推器 multi array 混合      更新时间:2023-10-16

我已经用 G++ 4.7 做了一个前沿设置(尽管目前我仍在使用 Debian Wheezy 上sudo apt-get boost-all-dev附带的 boost 1.48)。

我的代码设置在要使用的逻辑数据结构是unique_ptr的多维数组的地方。 但是,如果其中有unique_ptr,multi_array似乎甚至无法构造一个空的单元素数组。 因此,这有效:

boost::multi_array<int, 1> arrWorks (boost::extents[1]);

但这不会:

boost::multi_array< unique_ptr<int>, 1> arrFails (boost::extents[1]);

我想编译器的相关抱怨是:

/

usr/include/c++/4.7/bits/stl_uninitialized.h:225:从'void std::uninitialized_fill_n(_ForwardIterator, _Size, const _Tp&) [_ForwardIterator = std::unique_ptr*; _Size = unsigned int; _Tp = std::unique_ptr]]中需要

我在optional< unique_ptr<...> >上也遇到了一些问题,即使我应用了此处提供的补丁:

https://svn.boost.org/trac/boost/ticket/1841

(注意:通过 是否可以移动提升::可选?

例如:

boost::optional< unique_ptr<int> > optWorks (new int);
// Fails
boost::optional< unique_ptr<int> > optFails (std::move(optWorks));

我觉得我所做的是合法的。 事实上,我已经通过在unique_ptr合并到这个项目中,在所有权转移语义方面发现了一些错误。 所以我不想说"哦,这太复杂了,只使用原始指针"。

这是 boost 要支持的议程吗? 有时间表吗? 在此期间,我可以使用任何简单的解决方法吗?

Boost.MultiArray 不支持仅移动元素。

要么

使用支持仅移动元素的数组库,例如这个,要么只使用 std::vector

请参阅示例:https://godbolt.org/z/nsMf7x3Tv