Lendo diretamente de um std :: istream para um std :: string

Existe alguma maneira de ler um número conhecido de bytes, diretamente em um std :: string, sem criar um buffer temporário para fazer isso?

por exemplo, atualmente eu posso fazer isso por

boost::uint16_t len;
is.read((char*)&len, 2);
char *tmpStr = new char[len];
is.read(tmpStr, len);
std::string str(tmpStr, len);
delete[] tmpStr;

questionAnswers(6)

yourAnswerToTheQuestion