Для форматирования сложных строк в C++ с помощью stringstream можно использовать промежуточный объект stringstream, в котором сначала формируется строка, а затем получается с помощью метода str(). 1
Пример кода: 1
void func(int id, const std::string& data1, const std::string& data2) { std::stringstream ss; ss << 'Operation with id = ' << id << ' failed, because data1 (' << data1 << ') is incompatible with data2 (' << data2 << ')'; std::cerr << ss.str();}
Также можно создать обёртку над stringstream, которая позволяет форматировать строку в любом месте кода без дополнительных переменных. 1 Для этого в классе обёртки перегружают оператор вывода (<<), который принимает в качестве аргумента константную ссылку на объект любого типа, тут же выводит этот объект в свой внутренний stringstream и возвращает ссылку на себя, и оператор преобразования к строке, который возвращает строку, сформированную stringstream. 1
Ещё один способ форматировать вывод в stringstream — использовать манипуляторы из заголовка