abe*_*ier 0 c++ optional c++17
我试图使用a std::optional来实例化一个对象(之前无效).我发现了一个烦人的情况,我不知道如何优雅地解决这个问题.
我有以下数据结构:
struct Foo {
int foo1;
float foo2;
};
Run Code Online (Sandbox Code Playgroud)
作为会员std::optional<Foo> foo_.
在一个功能
void Bar::bar(int const value1, float const value2) {
foo_.emplace(value1, value2);
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这无法编译(在GCC 7.1中),因为它试图调用Foowith 的构造函数int const&, float const&.现在天真的我试图专注emplace于:
foo_.emplace<int, float>(value1, value2);
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为它试图使用initializer_list那么.
所以我的问题是如何优雅地召唤出来?
您必须添加构造函数作为emplace使用()构造函数而不是{}(这将允许聚合初始化).
struct Foo {
Foo(int i, float f) : foo1(i), foo2(f) {}
int foo1;
float foo2;
};
Run Code Online (Sandbox Code Playgroud)
或者明确使用的构造函数:
foo_.emplace(Foo{value1, value2});
Run Code Online (Sandbox Code Playgroud)