Как я могу обернуть std :: wstring в boost :: asio :: buffer?

Я пишу клиентское серверное приложение с помощью boost :: asio. Я хочу передать структуру от клиента на сервер. В структуре есть несколько std :: wstrings. Как кодировать структуру в boost :: asio :: buffer?

Обычно я использую boost::asio::streambuf для сериализации структур.

Message.h

 #ifndef MESSAGE_H #define MESSAGE_H #include  #include  struct Message { std::string _a; std::string _b; template  void serialize( Archive& ar, unsigned int version ) { ar & _a; ar & _b; } }; #endif 

client.cpp

 #include "Message.h" #include  #include  int main() { Message msg; msg._a = "hello"; msg._b = "world"; boost::asio::streambuf buf; std::ostream os( &buf ); boost::archive::text_oarchive ar( os ); ar & msg; boost::asio::io_service io_service; boost::asio::ip::tcp::socket socket( io_service ); const short port = 1234; socket.connect( boost::asio::ip::tcp::endpoint( boost::asio::ip::address::from_string( "127.0.0.1" ), port ) ); const size_t header = buf.size(); std::cout << "buffer size " << header << " bytes" << std::endl; // send header and buffer using scatter std::vector buffers; buffers.push_back( boost::asio::buffer(&header, sizeof(header)) ); buffers.push_back( buf.data() ); const size_t rc = boost::asio::write( socket, buffers ); std::cout << "wrote " << rc << " bytes" << std::endl;; } 

server.cpp

 #include "Message.h" #include  #include  int main() { boost::asio::io_service io_service; const uint16_t port = 1234; boost::asio::ip::tcp::acceptor acceptor( io_service, boost::asio::ip::tcp::endpoint( boost::asio::ip::address::from_string( "127.0.0.1" ), port ) ); boost::asio::ip::tcp::socket socket( io_service ); acceptor.accept( socket ); std::cout << "connection from " << socket.remote_endpoint() << std::endl; // read header size_t header; boost::asio::read( socket, boost::asio::buffer( &header, sizeof(header) ) ); std::cout << "body is " << header << " bytes" << std::endl; // read body boost::asio::streambuf buf; const size_t rc = boost::asio::read( socket, buf.prepare( header ) ); buf.commit( header ); std::cout << "read " << rc << " bytes" << std::endl; // deserialize std::istream is( &buf ); boost::archive::text_iarchive ar( is ); Message msg; ar & msg; std::cout << msg._a << std::endl; std::cout << msg._b << std::endl; }