Tôi đang cố gắng sử dụng std::make_unique
để instanciate một lớp có hàm tạo là nhận std::initializer_list
. Dưới đây là một trường hợp tối thiểu:Gọi hàm initializer_list thông qua make_unique/make_shared
#include <string>
#include <vector>
#include <initializer_list>
#include <memory>
struct Foo {
Foo(std::initializer_list<std::string> strings) : strings(strings) {}
std::vector<std::string> strings;
};
int main(int, char**) {
auto ptr = std::make_unique<Foo>({"Hello", "World"});
return 0;
}
Bạn có thể nhìn thấy trên Coliru rằng nó không xây dựng:
main.cpp:14:56: error: no matching function for call to 'make_unique(<brace-enclosed initializer list>)'
auto ptr = std::make_unique<Foo>({"Hello", "World"});
Vì vậy, là make_unique
báo cáo không thể sử dụng initializer_list
s? Có lỗi trong GCC 4.9.1 không? Hay tôi đã bỏ qua điều gì đó?
Không thể suy ra danh sách đã lập biểu bằng cách khấu trừ đối số mẫu. Hãy thử 'make_unique (std :: initializer_list ({" Hello "," World "}))'. –
@KerrekSB Vâng, trông giống như một câu trả lời cho tôi :) – Quentin
Hm, nó có hoạt động không, và nó có giúp ích gì không? –