当make_unique<T>
的构造函数与它们正常工作时,我很难理解为什么T
不接受Brace封闭的初始化列表。
我正在使用SFML并创建RenderWindow
的实例。 RenderWindow
将VideoMode
实例作为其第一个参数。 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代码不起作用。
请有人能为我解释一下吗?
干杯