Это
char buffer[512];
sprintf( "%d %f %s", 12, 12.4, "ololo" );
Сильно подвержено ошибкам типа пропуска параметра, или передачи параметра не того типа что ожидается. У меня был трудно уловимый баг когда я вместо string.c_str() передавал просто string, сеанс отладки был просто "чудесен".
Решение:
class StringBuilder {
protected:
std::stringstream mStream;
public:
explicit StringBuilder( const char * str ) {
stringstream::sync_with_stdio(false);
mStream << str;
}
explicit StringBuilder( ) {
stringstream::sync_with_stdio(false);
}
template<class T>
StringBuilder & operator<< (const T& arg) {
mStream << arg;
return *this;
}
operator string() const {
return mStream.str();
}
const char * ToCStr() {
return mStream.str().c_str();
}
};
Позволяет форматировать строки так:
StringBuilder( "DIPs: " ) << ruDIPs() << "\nTCs: " << ruTextureUsedPerFrame() << "\nFPS: " << fpsCounter.fps;
Можете закидать меня какашками, и говорить что << это быдлокод и прочее "ко-ко-ко" и вообще очень медленно. Так вот профайлер говорит обратное, юзабельность тоже.