Я хотел бы создать unique_ptr
, содержащий vector<string>
, который содержит только один элемент. Возможно ли сделать это в одной строке кода? Я пробую такой подход:
auto values = make_unique<vector<string>>({value});
Но компилятор (clang ++) жалуется:
No matching function for call to 'make_unique' candidate template ignored:
substitution failure [with _Tp = std::__1::vector<std::__1::basic_string<char>, std::__1::allocator<std::__1::basic_string<char> > >]: no type named '__unique_array_unknown_bound' in 'std::__1::__unique_if<st... candidate template ignored: substitution failure [with _Tp = std::__1::vector<std::__1::basic_string<char>, std::__1::allocator<std::__1::basic_string<char> > >]: no type named '__unique_array_known_bound' in 'std::__1::__unique_if<std:... candidate function [with _Tp = std::__1::vector<std::__1::basic_string<char>, std::__1::allocator<std::__1::basic_string<char> > >, _Args = <>] not viable: requires 0 arguments, but 1 was provided
Я не понимаю, почему он не работает, поскольку vector
, очевидно, принимает использование initializer_list
для строительства.
string value = ...;
auto values = vector<string>({value}); // this works
Создает unique_ptr<vector<string>>
и называет его push_back
единственным жизнеспособным подходом для создания такого unique_ptr
?
auto values = make_unique<vector<string>>();
values->push_back(value);
В более широком смысле, если У меня есть фиксированное количество элементов (например, 3 элемента), и я хотел бы построить unique_ptr
, содержащий вектор с этими элементами, как это сделать идиоматическим c способом?