Я пытаюсь использовать std::make_shared
для построения объекта в куче в моей программе вместо new
, но когда конструктор объекта поставляется со списком инициализаторов, простая замена не работает, и мне приходится вручную указывать точный тип:
#include <vector>
#include <memory>
struct A
{
A( std::vector<int> ) {}
};
int main()
{
std::shared_ptr<A> p{ new A({1}) }; //Ok
// std::shared_ptr<A> q = std::make_shared<A>({1}); //Compiler error
std::shared_ptr<A> q = std::make_shared<A>(std::initializer_list<int>{1}); // Ok, but too wordy
}
Есть ли способ использовать std::make_shared
в такой ситуации и сохранить компактность кода (избегайте явного типа списка инициализаторов)?
make_shared
не имеет дополнительной перегрузки сinitializer_list<T>
в качестве первого параметра, например, например. конструкторstd::optional
(#7) делает это. - person HolyBlackCat   schedule 03.07.2021