我正在使用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的目的。
答案 0 :(得分:1)
您可以选择:
this->client.socket()->emit(Socket_IO::general_message, sio::message::list(std::string(msg)), ...
这使工作完成。它将初始化临时字符串对象并将其传递给列表构造函数。