Как мне написать make_vector, похожий на std::make_tuple?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как мне написать make_vector, похожий на std::make_tuple?

Сообщение Anonymous »

Вместо создания таких векторов:

Код: Выделить всё

  std::vector     v1{1,2,3};
std::vector  v2{1.1,2.2,3.3};
std::vector  v3{Object{},Object{},Object{}};
Я хотел бы создать их с помощью общей функции:

Код: Выделить всё

  auto v1 = make_vector(1,2,3);
auto v2 = make_vector(1.1,2.2,3.3);
auto v3 = make_vector(Object{},Object{},Object{});
Похоже на std::make_pair и std::make_tuple, вот моя попытка создать вектор:

Код: Выделить всё

#include 
#include 
#include 

template 
auto make_vector(T&&... args)
{
using first_type = typename std::tuple_element::type;
return std::vector{std::forward(args)...};
}
Он компилируется, но когда я пытаюсь его использовать:

Код: Выделить всё

auto vec = make_vector(1,2,3);

Код: Выделить всё

m.cpp: In instantiation of ‘auto make_vector(T&& ...) [with T = {int, int, int}]’:
m.cpp:16:30:   required from here
m.cpp:8:78: error: invalid use of incomplete type ‘class std::tuple_element’
using first_type = typename std::tuple_element::type;
^
In file included from m.cpp:3:0:
/usr/include/c++/5/utility:85:11: note: declaration of ‘class std::tuple_element’
class tuple_element;
^
m.cpp:9:60: error: invalid use of incomplete type ‘class std::tuple_element’
return std::vector{std::forward(args)...};
^
In file included from m.cpp:3:0:
/usr/include/c++/5/utility:85:11: note: declaration of ‘class std::tuple_element’
class tuple_element;
^
m.cpp: In function ‘int main()’:
m.cpp:16:30: error: ‘void v1’ has incomplete type
auto v1 = make_vector(1,2,3);
Как создать общую процедуру,

которая использует первый тип первого параметра для создания экземпляра вектора?

Как я могу переслать аргументы в качестве значений инициализатора в вектор?

Подробнее здесь: https://stackoverflow.com/questions/369 ... make-tuple
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»