Как передать char в websocket::stream_base::decorator в лямда функции?

У меня есть не плохо работающий код для подключения к WS серверу Собственно меня интересует вот эта часть

    ws.set_option(websocket::stream_base::decorator([](websocket::request_type& req) {
        req.set("Api-Key", "28369a57-7476-4d2c-9b9d-574d4282b428");
        })
    );

Сейчас API ключ "зашит" - я хочу передать его как char и установить, но websocket::stream_base::decorator ожидает лямда функцию только с 1 аргументом

websocket::request_type& req

Если я пытаюсь передать ключь так то получаю ошибку

read(char* buf, char* key_input) {
    try
    {
        boost::beast::string_view key = std::string(key_input);
        //todo 
                ws.set_option(websocket::stream_base::decorator([](websocket::request_type& req, boost::beast::string_view& key) {
            req.set("Api-Key", "28369a57-7476-4d2c-9b9d-574d4282b428");
            })
        );

То я получаю ошибку

cannot convert from 'read::<lambda_277599cb9181424de88ebeceef4ed4a0>' to 'boost::beast::websocket::stream_base::decorator'

Собственно как я должен передавать ключ в лямда функцию в таком случае не пойму?


Ответы (1 шт):

Автор решения: magrif

Может определить функцию, которая принимает ключ, и на выходе даёт лямбду с захваченым ключом?

auto decorator_with_key(boost::beast::string_view& key) {
    return [key](websocket::request_type& req) {
        req.set("Api-Key", key);
    };
}

И затем использовать как

ws.set_option(websocket::stream_base::decorator(decorator_with_key("28369a57-7476-4d2c-9b9d-574d4282b428")));
→ Ссылка