boost :: asio
различные read
и функции и методы записи
принимают boost :: asio :: buffer
. Согласно документации буфера , изменяемый std :: Строка
не может быть заключена в boost :: asio :: buffer
и, следовательно, не может использоваться для функций asio read
. Вероятно, это связано с тем, что std :: string
не разрешает изменяемый доступ к своему внутреннему буферу (это обсуждалось ранее здесь ).
Это позор, потому что std :: string
- удобный способ представления изменяемых буферов данных в C ++. Без него мы либо останемся с массивами POD, boost :: array
и std :: vector
. Первые два неудобны для сообщений переменной длины. std :: vector
может работать, но это неестественный способ переноса буферов данных вокруг (*)
Вопросы:
std :: строка
с boost :: asio
для чтения буферов? Я что-то упустил? std :: vector
поддерживается в изменяемом буфере. Это потому, что он гарантирует, что его внутренний буфер непрерывен в памяти и разрешает изменяемый доступ к нему с помощью & vec [0]
? Заранее спасибо
(*) ИМХО. Посмотрите, например, на сериализацию protobuf
- она предлагает сериализацию в std :: string
, но не в std :: vector
, по крайней мере, не явно.
РЕДАКТИРОВАТЬ: Я все-таки использовал vector
. protobuf
разрешает сериализацию в вектор
с помощью вызова SerializeToArray
, который принимает указатель (туда можно передать & vec [0]
).