Почему в ответе beast / boost говорится, что невозможно преобразовать из списка инициализаторов в?

Я использую пример из boost / beast prepare_payload ()

 http::response<http::string_body> res{http::verb::post, "/"};
 res.set(http::field::user_agent, "Beast");
 res.body() = Respon.dump(4);
 res.prepare_payload();

2 вещи, которые я изменил: имя константы и данные, помещенные в body (). (Ответ - Json, Respon.dump (4) - строка) И я получаю сообщение об ошибке.

Error   C2440   'initializing': cannot convert from 'initializer list' to 'boost::beast::http::message<false,boost::beast::http::basic_string_body<char,std::char_traits<char>,std::allocator<char>>,boost::beast::http::fields>'   https server    D:\tempo\03-lab-08-http-server-Hamsterrhino\sources\source.cpp  171     

Почему пример не работает? Работа изменилась, но забыли изменить пример?


person Gardy    schedule 30.01.2021    source источник
comment
Последняя версия документов верна boost.org/doc/libs/develop/libs/beast/doc/html/beast/ref/   -  person sehe    schedule 31.01.2021


Ответы (1)


Вы инициализируете ответ, как если бы это был запрос.

В ответе нет HTTP-глагола или пути запроса;

Конструктор ответа может инициализировать сообщение и поля, считая более традиционным инициализировать их после построения, и передать статус / версию в конструктор:

Live On Coliru

#include <boost/beast/http.hpp>
#include <boost/beast/http/status.hpp>
#include <iostream>
namespace http = boost::beast::http;

struct {
    std::string dump(int) const { return "probably json?"; }
} static Respon;

int main() {
    http::response<http::string_body> res(http::status::ok, 11);
    res.set(http::field::user_agent, "Beast");
    res.body() = Respon.dump(4);
    res.prepare_payload();
    std::cout << res;
}

Печать

HTTP/1.1 200 OK
User-Agent: Beast
Content-Length: 14

probably json?
person sehe    schedule 31.01.2021