问题标签 [boost-optional]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4894 浏览

c++ - boost::optional 不允许我重新分配 const 值类型

在我看来应该有四种变体boost::optional

  • optional<Foo>=> 持有一个可变的 Foo 并且可以在初始化后重新分配

  • optional<Foo const> const=> 持有一个 const Foo 并且在初始化后不能重新分配

  • optional<Foo> const=>(应该?)持有一个可变的 Foo 但在初始化后不能重新分配

  • optional<Foo const>=> (should?) 持有一个 const Foo 并且可以在初始化后重新分配

前 2 个案例按预期工作。但是对optional<Foo> constconst Foo 的取消引用,并且optional<Foo const>不允许在初始化后重新分配(如本问题所述)。

const 值类型的重新分配具体是我遇到的,错误是:

/usr/include/boost/optional/optional.hpp:486:错误:将 'const Foo' 作为 'Foo& Foo::operator=(const Foo&)' 的 'this' 参数传递会丢弃限定符 [-fpermissive]

它发生在这里:

构造后,实现将赋值运算符用于您参数化可选项的类型。它显然不想要一个 const 值的左操作数。但是为什么不能将非 const 选项重置为新的 const 值,例如在这种情况下:

一些问题:

  • 想要这个在概念上是好的,而不能做到这一点只是实施中的侥幸,我对吗?

  • 如果我不编辑 boost 源,那么在不完全废弃 boost::optional 的情况下实现上述循环中的逻辑的干净方法是什么?

  • 如果这确实有意义并且我要编辑 boost::optional 源(我已经不得不这样做以使其支持可移动类型,尽管我怀疑他们很快就会自己这样做)那么微创更改可能做这个把戏?

0 投票
2 回答
4871 浏览

c++ - 在 C++11 中实现 boost::optional

我正在尝试使用 c++11 功能实现 boost::optional 之类的数据结构。这是我到目前为止所拥有的:

我利用不受限制的联合功能为可以就地存储的可选值创建正确对齐的空间,而不是动态分配空间。事情大部分都有效,除非我想创建一个带有引用的可能<>。例如maybe<int&>导致 g++ 4.7 抱怨:

我应该怎么做才能使可能的类存储引用?也欢迎对课程提出任何其他改进/建议。

0 投票
7 回答
8795 浏览

c++ - 何时使用 boost::optional 以及何时使用 std::unique_ptr 以实现可以返回“无”的函数?

据我了解,有两种方法可以实现有时不返回结果的函数(例如在 ppl 列表中找到的人)。

*- 我们忽略原始 ptr 版本,与 bool 标志配对,并在未找到版本时出现异常。

或者

那么有什么理由比另一个更喜欢一个吗?

0 投票
1 回答
1097 浏览

c++ - boost::optional 与 const 成员

为什么这不起作用?

它似乎是在尝试使用赋值运算符,而不是尝试在适当的位置构造它。我曾假设它会在未初始化的内存上调用 O 的复制构造函数。

0 投票
4 回答
1290 浏览

c++ - 如何防止 boost::optional从被错误地构造为0?

boost::optional<T>(1.51) 提供了一种构造对象的方法,这种方法对我的用户来说是非常危险的,我想阻止这种方法。假设我有自己的整数类,我想传递一个可选的整数并将其存储在某个类中:

现在,这是用户使用该类的方式:

我想了解这里发生了什么并防止这种行为。


有趣的是,


boost::none对于我的领域来说,这完全是一个有效的值,但是boost::none当用户尝试输入 a 时偷偷摸摸是0非常误导和危险的。

意图可能有点隐藏,因为我并没有真正推出一个myint课程,而且我真的没有一个class myclass几乎没有任何目的的课程。无论如何,我需要向函数发送 10 个左右的可选整数,而重复数据删除不起作用。(你可以想象我问了你的年龄、身高和财富,还有三个特殊的按钮可以检查你是否不想回答问题)


我发布了一个似乎在下面有效的答案(根据 Mooing 的 Duck & Ilonesmiz 建议构建,但更轻)。不过,我很高兴听到有关它的评论。

0 投票
1 回答
381 浏览

c++ - Boost Spirit Karma 多种选择

我看到一个我没有看到解决方案的错误。一、相关代码:

在这range %=部分,我得到编译错误

我猜它正在尝试将 RangeEntry 与 ulong_ 规则匹配,但我不知道为什么?我错过了什么?

0 投票
1 回答
1770 浏览

c++ - boost::可选引用 boost::variant 类型

我目前正在为游戏编写一些代码,其中一部分涉及创建迄今为止在游戏中发生的动作的历史记录。此历史记录存储在state_pair_t' 对动作 ( action_t's) 的向量中,并在执行动作后指向结果游戏状态的指针。现在我有一个函数,它从最近的时间点开始查看历史并向后迭代,直到找到某种类型的动作,然后返回对该动作的引用。no_action现在我们决定,如果没有找到任何操作,使用 boost optional 来返回 a并用于boost::optional处理这些应该返回值但可能没有返回值的函数可能是一个很好的设计举措。当我真正尝试实现这一点时,我遇到了一个我不明白的错误:

现在这给出了一个编译错误:

现在,如果我将其稍微更改为:

我得到另一个错误:

我不确定这些错误中的任何一个试图在这里告诉我什么。我在这里尝试做的不是一个好主意boost::optional吗?甚至可能吗?

0 投票
2 回答
866 浏览

c++ - 我可以从 constexpr 函数返回一个可选项吗?

  • 我可以optionalconstexpr函数中返回一个吗?
  • 为什么?
  • 如果是,它是如何工作的?

我对 和 都boost::optional感兴趣std::optional。他们的行为是否相同?

0 投票
1 回答
4281 浏览

boost - init boost::optional 不可复制对象

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进度会被冻结?”。

0 投票
4 回答
106119 浏览

c++ - 应该如何使用 std::optional ?

我正在阅读 的文档,std::experimental::optional并且对它的作用有一个很好的了解,但我不明白什么时候应该使用它或应该如何使用它。该站点尚未包含任何示例,这使我更难掌握该对象的真实概念。何时使用是std::optional一个不错的选择,以及它如何弥补以前标准 (C++11) 中未找到的内容。