括号封装的初始化列表适用于构造函数,但不适用于make_unique

时间:2015-11-15 20:58:16

标签: c++ sfml unique-ptr

make_unique<T>的构造函数与它们正常工作时,我很难理解为什么T不接受Brace封闭的初始化列表。

我正在使用SFML并创建RenderWindow的实例。 RenderWindowVideoMode实例作为其第一个参数。 VideoMode的构造函数有3个参数(最后一个是可选的),我成功地在它的位置传递了一个braced-initializer:

sf::RenderWindow window({w_width, w_height}, title);

我后来尝试使用unique_ptr创建make_unique。标准说,make_unique的参数被转发到模板参数的构造函数,所以我认为以下内容应该有效:

auto window = std::make_unique<RenderWindow>({w_width, w_height}, title);

但不幸的是,我使用GCC 5.1.1得到以下编译器错误。

error: no matching function for call to ‘make_unique(<brace-enclosed initializer list>, const char* const&)’
 auto window_ptr = std::make_unique<sf::RenderWindow>({w_width, w_height}, title);

我想我已经错过了理解make_unique的微妙之处,但我找不到一个明确的答案,为什么上面的make_unique代码不起作用。

请有人能为我解释一下吗?

干杯

0 个答案:

没有答案