Я хочу произвести целое число к a std::stringstream
с эквивалентным форматом printf
%02d
. Есть ли более легкий способ достигнуть этого, чем:
std::stringstream stream;
stream.setfill('0');
stream.setw(2);
stream << value;
Действительно ли возможно передать своего рода флаги формата потоком к stringstream
, что-то как (псевдокод):
stream << flags("%02d") << value;
Вы можете использовать стандартные манипуляторы из
, но нет такого удобного манипулятора, который одновременно заполняет
и ширину
:
stream << std::setfill('0') << std::setw(2) << value;
Нетрудно написать собственный объект, который при вставке в поток выполнял обе функции:
stream << myfillandw( '0', 2 ) << value;
Например,
struct myfillandw
{
myfillandw( char f, int w )
: fill(f), width(w) {}
char fill;
int width;
};
std::ostream& operator<<( std::ostream& o, const myfillandw& a )
{
o.fill( a.fill );
o.width( a.width );
return o;
}
Вы не можете добиться большего в стандартном C ++. В качестве альтернативы вы можете использовать Boost.Format:
stream << boost::format("%|02|")%value;
Вы можете использовать
stream<<setfill('0')<<setw(2)<<value;