【发布时间】:2017-07-29 13:18:34
【问题描述】:
我正在尝试使用std::optional 来延迟实例化对象(之前无效)。我发现了一个烦人的情况,我不知道如何优雅地解决这个问题。
我有以下数据结构:
struct Foo {
int foo1;
float foo2;
};
作为会员std::optional<Foo> foo_。
在函数中
void Bar::bar(int const value1, float const value2) {
foo_.emplace(value1, value2);
}
令我惊讶的是,它无法编译(在 GCC 7.1 中),因为它试图用 int const&, float const& 调用 Foo 的构造函数。
现在天真的我试图将emplace 专业化为:
foo_.emplace<int, float>(value1, value2);
这也不起作用,因为它尝试使用initializer_list。
所以我的问题是如何优雅地调用 emplace?
【问题讨论】:
-
提示:你将如何构造一个
Foo开始?