Httplib отправляет контент с помощью поставщика контента и интеллектуального указателяC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Httplib отправляет контент с помощью поставщика контента и интеллектуального указателя

Сообщение Anonymous »

Я хочу использовать функцию httplib сервера c++ для отправки контента с помощью поставщика контента.

Но я хочу использовать ее с интеллектуальным указателем, поскольку предыдущие вычисления выполняются перед отправкой.
Если я упрощу пример httplib, я сделаю следующее:

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

const size_t DATA_CHUNK_SIZE = 4;

svr.Get("/stream", [&](const Request &req, Response &res) {
std::size_t data_length = 16; // random length
auto data = std::make_shared_for_overwrite(data_length);

// doing calculation which potentially fail
if (!create_data_string(data, data_length)) {
// return an error
return;
}

res.set_content_provider(
data_length, // Content length
"text/plain", // Content type
[&, data](size_t offset, size_t length, DataSink &sink) {
sink.write(&data[offset], std::min(length, DATA_CHUNK_SIZE));
return true; // return 'false' if you want to cancel the process.
},
[data](bool success) { /* data will be released after the call */ });
});
Метод работает и протестирован на реальном контенте, но я не знаю, лучше ли его использовать.
Что вы сделаете? думать? Мне нужна проверка кода этого фрагмента кода.
Обновление:
После ответа Red.Wave я обновите сценарий отправки содержимого с помощью std::string:

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

const size_t DATA_CHUNK_SIZE = 4;

svr.Get("/stream", [&](const Request &req, Response &res) {
std::string data;
data.resize(16); // random length

// doing calculation which potentially fail
if (!create_data_string(data)) {
// return an error
return;
}

res.set_content_provider(
data.size(), // Content length
"text/plain", // Content type
[&, data /* 

Подробнее здесь: [url]https://stackoverflow.com/questions/79079675/httplib-send-content-with-the-content-provider-and-smart-pointer[/url]
Ответить

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

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

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

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

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