Самый гибкий способ предоставления печатаемости типу
Например, я разрабатываю свой библиотечный тип A
. Как лучше всего предоставить способ его печати, чтобы любой пользователь мог его использовать?
std::ostream operator<<(std::ostream&, const A&);
не всегда удобен, т.к. клиент может не использовать iostream (из-за размеров и перформанса), не все логирующие библиотеки его поддерживают
std::string to_string(const A&);
(или метод)
уже выглядит гибче, но при этом динамически выделяет память под строку, что тоже не все клиенты могут позволить
const char* to_string(const A&);
непонятно кто выделяет память
void to_string(char* res, const A&);
вроде бы самый гибкий, но при это out параметр не хочется использовать
Есть ли какие-то практики как лучше всего сделать?