Показать сообщение отдельно
Старый 13.02.2015, 21:53   #1
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Велик для форматирования строк

Это
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;
Можете закидать меня какашками, и говорить что << это быдлокод и прочее "ко-ко-ко" и вообще очень медленно. Так вот профайлер говорит обратное, юзабельность тоже.
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Samodelkin (13.02.2015)