我已经用 G++ 4.7 组合了一个最前沿的设置(尽管目前我仍在使用sudo apt-get boost-all-dev
Debian Wheezy 附带的 boost 1.48)。
我的代码设置在要使用的逻辑数据结构是 unique_ptr 的多维数组的地方。但是multi_array
,如果其中有一个 unique_ptr ,似乎甚至无法构造一个空的单元素数组。因此这是有效的:
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&) [with _ForwardIterator = std::unique_ptr*; _Size = 无符号整数;_Tp = std::unique_ptr]'</p>
optional< unique_ptr<...> >
即使我应用了此处提供的补丁,我也遇到了一些问题:
https://svn.boost.org/trac/boost/ticket/1841
(注意:通过Is it possible to move a boost::optional 找到的?)
例如:
boost::optional< unique_ptr<int> > optWorks (new int);
// Fails
boost::optional< unique_ptr<int> > optFails (std::move(optWorks));
我觉得我在做的事情是合法的。事实上,通过将 unique_ptr 合并到这个项目中,我已经在所有权转移语义方面发现了一些错误。所以我不想说“哦,这太复杂了,只需使用原始指针”。
这是否在 boost 的议程上支持?有时间表吗?在此期间我可以使用任何简单的解决方法吗?