混合助推器的multi_array和可选,C++11 unique_ptr不起作用
Mixing boost's multi_array and optional with C++11 unique_ptr not working
我已经用 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
- 为什么 std::unique 不调用 std::sort?
- MSVC是否支持C++11样式的属性而不是__declspec
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如何将模板转换为C++11之前的模板
- c++11评估顺序(未定义的行为)
- C++中的VLA,扩展名为std=C++11
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- "类模板示例<int>;"语句对 C++11 是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 如何使用lock_guard在c++11中实现scoped_lock功能
- C++11 中不同类型的对象的 std::array 的替代方案
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- STLPort using C++11
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在C++11中,将对象的所有权从一个unique_ptr转移到另一个unique _ptr