Russian Qt Forum

Программирование => С/C++ => Тема начата: RedDog от Май 24, 2020, 11:57



Название: runtime std::tuple
Отправлено: RedDog от Май 24, 2020, 11:57
Как можно организовать динамический std::tuple
Код:
using variant= std::variant<int, double, std::string>;

std::vector<variant> array;

array.push_back(5.0);
array.push_back("some string");
array.push_back(static_cast<int>(1));

std::tuple<double, std::string, int> tuple1{std::get<double>(array[0]),
                                            std::get<std::string>(array[1]),
                                            std::get<int>(array[2])};

array.push_back("some string 2");

std::tuple<double, std::string, int, std::string> tuple2{std::get<double>(array[0]),
                                                         std::get<std::string>(array[1]),
                                                         std::get<int>(array[2]),
                                                         std::get<std::string>(array[3])};

array динамически заполняется в runtim-е, и в какой то момент с него надо "снять" std::tuple.


Название: Re: runtime std::tuple
Отправлено: ssoft от Май 24, 2020, 13:00
std::tuple не является контейнером, а является структурой данных с предопределенными на этапе компиляции полями.
Например, tuple<int> и tuple<double> - это два совершенно разных и не связанных между собой типов данных.
Поэтому не понятен сам вопрос - что подразумевается под "динамический std::tuple" и зачем он такой нужен?
Для динамических типов есть std::variant и std::any.


Название: Re: runtime std::tuple
Отправлено: RedDog от Май 24, 2020, 14:13
В моем примере tuple1 и tuple2, т.е в рантайме сгенерить структуры.
Либа pqxx принимает tuple для быстрой вставки в бд, но я при разработке не знаю сколько и каких полей будет.


Название: Re: runtime std::tuple
Отправлено: Пантер от Май 24, 2020, 14:25
std::tuple должен быть определен на этапе компиляции. У тебя  не получится его динамически в рантайме формировать.