matching function for call to 'make_unique'
Что я делаю не так?
template<class ...Args>
void (Args&&... args)
{
std::list<std::unique_ptr<Base>> obj(std::make_unique<Child>(std::forward<Args>(args)...));
}
Тут разобрался, но мне нужно ещё указать специализацию для Child<T>, как-то так пытался std::tuple<args...>>::type>, но не взлетело template<class ...Args> void (Args&&... args) { std::list<std::unique_ptr<Base>> obj(std::make_unique<Child<std::tuple<args...>>::type>>(std::forward<Args>(args))…); }
я не понимаю, что вы хотите сделать в итоге
можете расписать foo<int, double>?
Задача такая: создать функцию, что веруть список, в котором будут храниться указатели на Child. Для этого я сделал Base пустышкой, чтобы хранить Child с разными <T>. Но вот у меня попросили специализировать тип при вызове std::make_unique<Child<А как тут тип получить для args?>>
Мне непонятно, каким образом T для Child определяется при вызове foo
Должно определятся из аргумента конкретного args для которого он создается, хочу чтобы компилятор вывел сам
то есть вы хотите написать примерно template<typename T, typename... Args> void push_back_vec(std::vector<T>& v, Args&&... args) { static_assert((std::is_constructible_v<T, Args&&> && ...)); (v.push_back(std::forward<Args>(args)), ...); } я правильно понимаю?
Хочу из этого получить std::list<std::unique_ptr<Base>> в котором будет 2 объекта Child<int> Child<double>. И чтобы вызвать можно было вот так auto list = create(1, 1.5);
Ну вот см. пример https://t.me/supapro/988609 там будет примерно (v.push_back(std::make_unique<Child<Args>>(args)), ...);
А как можно заменить , … в С++14? Компилятор говорит, что это С++17 расширение
инициализировать массив эффектами
заменить (f(), ...) на int unused[] = { ((void)f(), 0)... };
Обсуждают сегодня