将std :: string_view传递给执行const std :: string&的API

时间:2019-03-25 07:00:52

标签: c++ std c++17 stdstring

我正在使用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) {
    });
}

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'

我想知道他们是如何通过API传递std :: string_view来期望const std :: string&

的。

我不能使用c_str()函数,因为该字符串可能包含二进制数据,该二进制数据可能包含空字符(0x00)。

我当时正在考虑创建一个字符串对象sio::message::list(std::string str(msg)),但希望查询是否会破坏使用std :: string_view的目的。

1 个答案:

答案 0 :(得分:1)

您可以选择:

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

这使工作完成。它将初始化临时字符串对象并将其传递给列表构造函数。