Russian Qt Forum
Ноябрь 25, 2024, 04:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: runtime std::tuple  (Прочитано 4855 раз)
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« : Май 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.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #1 : Май 24, 2020, 13:00 »

std::tuple не является контейнером, а является структурой данных с предопределенными на этапе компиляции полями.
Например, tuple<int> и tuple<double> - это два совершенно разных и не связанных между собой типов данных.
Поэтому не понятен сам вопрос - что подразумевается под "динамический std::tuple" и зачем он такой нужен?
Для динамических типов есть std::variant и std::any.
Записан
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #2 : Май 24, 2020, 14:13 »

В моем примере tuple1 и tuple2, т.е в рантайме сгенерить структуры.
Либа pqxx принимает tuple для быстрой вставки в бд, но я при разработке не знаю сколько и каких полей будет.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Май 24, 2020, 14:25 »

std::tuple должен быть определен на этапе компиляции. У тебя  не получится его динамически в рантайме формировать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 22.