c++ - How to elegantly emplace optional with const values -
i trying use std::optional late instantiate object (which not valid before). found annoying situation, not know how elegantly solve this.
i have following data structure:
struct foo { int foo1; float foo2; }; as member std::optional<foo> foo_.
in function
void bar::bar(int const value1, float const value2) { foo_.emplace(value1, value2); } to surprise, fails compile (in gcc 7.1) because tries call constructor of foo int const&, float const&. naive me tried specialize emplace as:
foo_.emplace<int, float>(value1, value2); which did not work either because tries use initializer_list then.
so question how 1 call emplace elegantly?
you have add constructor emplace use () constructor , not {} (which allow aggregate initialization).
struct foo { foo(int i, float f) : foo1(i), foo2(f) {} int foo1; float foo2; }; or explicit on constructor used:
foo_.emplace(foo{value1, value2});
Comments
Post a Comment