问题标签 [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 投票
2 回答
638 浏览

c++ - 为什么这种使用 boost::none 无法使用 nvcc 编译?

我正在尝试编译以下代码:

使用以下命令行放置在文件a.cu中,使用 CUDA 编译器:

但我得到了一堆错误:

为什么会发生这种情况,我可以在使用 nvcc 编译的(主机端)代码中实际使用 boost::optional 的同时规避这个问题吗?

附加信息:

  • 该代码使用 g++ 6.3.0(我的发行版的编译器)编译得很好。
  • 这段代码(或者更确切地说,类似的代码)用于在我使用的早期 Linux 发行版上编译和工作,其中编译器是 g++ 5.4.x 。
  • 我已经用 Boost 版本 1.65.1 和 1.69.0 试过这个。
  • 我已经尝试过使用 CUDA 版本 9.2.88 和 10.0.130 。
0 投票
1 回答
680 浏览

c++ - 如何将构造函数参数转发给 boost::optional

我有以下简单的结构:

我想在不复制的情况下将它与 boost optional 一起使用。这是一种选择:

是否可以不使用 emplace 功能?(我的意思是一行表达式)

0 投票
1 回答
438 浏览

c++11 - 如何初始化不可移动和不可复制的类成员 - boost::optional

我有一个不可移动和不可复制的类型:

我可以通过这种方式构建可选的 boost:

我还需要初始化boost::optional<A>哪个是类成员。这是我的解决方案:

是否有可能只有boost::optional<A>类成员并以某种方式初始化它?

编辑(澄清) 我想要boost::optional<A> op_类数据成员,但我不知道如何初始化它。

0 投票
1 回答
408 浏览

c++ - boost::optional - 对构造函数通过引用获取其他对象的对象使用 boost::in_place

我尝试将 boost::in_place 用于不可移动和不可复制的对象,构造函数通过引用获取其他对象:

代码无法编译:将“A&”类型的引用绑定到“const A”会丢弃限定符

如何解决?

0 投票
0 回答
506 浏览

c++ - boost::optional 奇怪的未初始化问题

gcc 有时会通过可能未初始化的方式对 boost::optional 的工作发出警告,但我认为这是误报(如此处所述https://github.com/boostorg/optional/issues/72)。

但是现在 valgrind 在运行时报告了同样的问题,所以出了点问题,知道问题出在哪里:

valgrind 和 gcc 在线报告问题:

那个potentialyFoo::free_mem可以用于未初始化的内存。

奇怪的是,如果我在Foo::free_mem gcc 警告(9.1.0)中启用 printf 并且 valgrind(3.15)没有报告任何问题,如果我将它评论回 gcc 并且 valgrind 报告问题。

我以这种方式用 gcc 编译示例:

那么发生了什么,我的代码中的错误,boost::optional 中的错误,或者 valgrind 和 g++ 中的同时错误?

可能是 g++ 中的这个错误会生成错误的代码,因此 valgrind 也会抱怨错误?

0 投票
1 回答
119 浏览

c++ - 用 boost::optional 重载歧义,解决方法?

我想用 boost::optional 重载,但由于重载歧义而不能重载,我正在寻找一种解决方法。

例如,由于歧义,以下代码将无法编译:

我想做这个奇怪的事情的原因是,由于 boost::optional 的右值/左值问题引起的错误,我用函数重载替换了 boost::optional 实例。问题是发生了一些 API 损坏,所以我需要弃用旧的函数定义。

API 损坏的一个示例是使用其他默认参数,

要求我切换参数的顺序:

但是现在中断的情况是 foo(1, boost::none, 3.14);,我想为这种类型的函数调用保留一个不推荐使用的函数定义。有没有优雅的解决方法?

我想一个(丑陋的)可能性是

但这不会激发喜悦。有任何想法吗?

0 投票
0 回答
180 浏览

c++11 - c++ - 是否可以创建一个可选的承诺?

考虑以下代码:

它无法编译,因为在 boost::optional 实现的深处,它试图使用 S 的复制构造函数。

有没有办法克服这个问题并在不复制承诺的情况下移动承诺?

我试图显式地将移动构造函数添加到 S

无济于事。

编译器错误信息:

使用 Boost 1.55.0、GCC 6.3

0 投票
0 回答
77 浏览

c++ - 在 C++ 中是否有 anti-std::move 的地方

boost::optional可以存储引用,所以假设我想写一个这样的函数

这会失败,static_assert因为传递给value_or引用的参数optionals 不应该是右值引用。我看到 boost 库的作者决定保护我免受类似

在那里我可以得到一个临时的悬空引用。

但是如果“我知道我在做什么”我可以用类似的东西来规避这个

哪里to_lvalue可以定义为

可以说这是一个很好的“我知道我在做什么”的用例,或者我在这里错过了更大的东西吗?

0 投票
1 回答
54 浏览

c++ - 用另一个布尔值提升可选

我正在尝试编译类似的东西:

是否有可能实现它 - 将有效对象存储在变量中并将其分解为布尔值?

0 投票
1 回答
132 浏览

c++ - std::pair() 具有空值,例如 boost::optional

我已经编写了上面的类来获取链接统计信息,rx_error, rx_dropped, tx_error, tx_dropped

在上面的两个函数中,getRxLinkStats()getTxLinkStats(),我想知道是否有一种优雅的方式来返回它std::pair(),这将表明它是空的,意思getLinkStats()是失败了。