使用boost :: optional时避免临时

MK.*_*MK. 9 c++ boost optional

boost :: optional支持in_place构造,如下所示:

#include <boost/optional.hpp>
#include <boost/utility/typed_in_place_factory.hpp>

class Foo
{
    int a,b;

  public:
    Foo(int one, int two) : a(one),b(two) {}
};


int main()
{
    boost::optional<Foo> fooOpt(boost::in_place<Foo>(1,3));
}
Run Code Online (Sandbox Code Playgroud)

一旦我们有一个初始化的fooOpt,有没有一种方法可以为它分配一个新的Foo而不创建一个临时的?

就像是 :

fooOpt = boost::in_place<Foo>(1,3);
Run Code Online (Sandbox Code Playgroud)

谢谢!

Bil*_*nch 10

推动::可选

#include <boost/optional.hpp>

int main() {
    boost::optional<int> x;
    x = boost::in_place(3);
}
Run Code Online (Sandbox Code Playgroud)

我们还可以通过以下方式显示(通过代码)这是通过Foo继承来就地构建对象boost::noncopyable:

#include <boost/optional.hpp>
#include <boost/noncopyable.hpp>

class Foo : boost::noncopyable {
    public:
        Foo(int one, int two) {}
};


int main() {
    boost::optional<Foo> x;
    x = boost::in_place(3, 4);
}
Run Code Online (Sandbox Code Playgroud)

std :: optional(最终......)

最终,我们将获得访问权限std::optional.此类型将实现一种emplace()方法,该方法也将实现就地构造.

#include <optional>

int main() {
    std::optional<int> x;
    x.emplace(3);
}
Run Code Online (Sandbox Code Playgroud)

boost :: optional(很快......)

在1.56.0版本中,boost::optional还将实现emplace()我为std :: optional所讨论的方法.所以,让我们看看:

#include <boost/optional.hpp>

int main() {
    boost::optional<int> x;
    x.emplace(3);
}
Run Code Online (Sandbox Code Playgroud)