170 похожих чатов

Подскажите, хочу написать функцию для SQL-запросов. Пока какая-то порнография

выходит, вроде такого:

template <typename... ColumnType, class Func, typename... Args>
void sql_exec(string_view query, Func&& result_consumer, Args... query_args)
{
// do query...
while (true) {
std::tuple<Columns...> query_result;
// get next query row, break if no more results
result_consumer(query_result);
}
}

И соответственно вызываться будет как-то так:

sql_exec<int, long, std::string>("SELECT a, b, c FROM table...",
[](const auto& results) {
auto [column1_val, column2_val...] = results;
// process columnX_val data...
}),
query_param1, query_param2...);

Во-первых тип Func неплохо бы как-то проверить/ограничить, во-вторых в целом как-то плохо кажется. Можно ли прилично как-то сделать и как?

10 ответов

23 просмотра

Мне кажется, можно func<> юзать. Да, оверхед, но можно хоть типы извлечь. А в случае, если у тебя api для исполнения sql запросов, сомневаюсь, что оверхед будет заметен прям сильно

Не надо просто пытаться статично описать все наборы данных. DDD и всё.

Kirill-Frolov Автор вопроса
Ilya Zviagin
Не надо просто пытаться статично описать все набор...

Я не понимаю как DDD может быть в языке со статической типизацией. Это же не питон. Конечно идиому "всё есть строка" реализовать тривиально, но оно как-то не очень эффективно потом при работе с большими наборами чисел, даи ошибка в рантайме когда число неожиданно не число -- неудобно.

Alex Noname
Это как вообще

Задавай конкретные вопросы.

Kirill Frolov
Я не понимаю как DDD может быть в языке со статиче...

Что мешает сделать что-то, что умеет пересобираться в пользовательские структуры данных? Вон в userver у них возвращает PgAnswer, который через boost.pfr и маппинги в типы пересобирается в типы пользовательские

std::invocable<...> и уберите оттуда тупл

Похожие вопросы

Обсуждают сегодня

Ребят в СИ можно реализовать ООП?
Николай
33
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
core\config\database\connections\default.php На всякий случай проверь всё же файл <?php return [ 'driver' => env('DB_TYPE', 'mysql'), //$database_type 'host' => env('D...
Andrey K
2
Всем доброго вечера. Разрабатываю 32 раз. приложение в Delphi. Столкнулся с тем, что стандартный  TFilestream  не работает с большим файлом > 2 ГБайт (после вызова функции see...
Vadim Gl
16
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
добрый день. Подскажите, есть сайт на 1.4.7 и я хочу обновиться, особо ничего не меняя. мне выбирать версию 1.4.35 или третью ветку? и можно ли обновлять "как есть", или нужно...
Digital Cat
12
народ, плиз хелп, всю голову сломал себе уже... разве может быть так, что GetProcAddress( GetModuleHandle( "kernel32.dll" ), "SetThreadDescription" ) вернёт ненулевое значение...
Iluha Companets
12
Кто кодит под Лазарем на винде, у вас аналогично VCL переопределяются CreateWnd и CreateParams для конкретных классов контролов и все заданные флаги влияют?
А Андрей
11
У меня задача: написать брокер сообщений. Очереди и потребители. Очереди поддерживают приоритеты. Очередь отдает сообщения, только обработчикам с соответствующими характеристи...
Aleksandr Filippov
2
Карта сайта