Передача std :: string_view в API, представляющая const std :: string & - PullRequest
0 голосов
/ 25 марта 2019

Я использую библиотеку Socket.IO для создания клиента. При отправке сообщения я должен передать свое сообщение (данные) как sio::message::list(msg)

void Socket_IO::send_message(std::string_view msg)      //Gives Error
//void Socket_IO::send_message(const std::string &msg)  //Works
{
    this->client.socket()->emit(Socket_IO::general_message, sio::message::list(msg), [&](sio::message::list const& msg) {
    });
}

class sio :: message :: list имеет конструктор

list(const string& text)
{
    m_vector.push_back(string_message::create(text));
}

но не имеет конструктора std :: string_view

Ошибка:

'<function-style-cast>': cannot convert from 'std::string_view' to 'sio::message::list'

Я хочу знать, есть ли у них какой-либо способ передать std :: string_view для API, ожидающего const std :: string &

Я не могу использовать функцию c_str (), поскольку строка может содержать двоичные данные, которые могут содержать нулевой символ (0x00).

Я думал о создании строкового объекта sio::message::list(std::string str(msg)), но хотел бы узнать, не побьет ли он цель использования std :: string_view.

1 Ответ

1 голос
/ 25 марта 2019

Вы можете пойти с:

this->client.socket()->emit(Socket_IO::general_message, sio::message::list(std::string(msg)), ...

это делает работу выполненной. Он инициализирует временный строковый объект и передает его в конструктор списка.

...