Я рефакторинга некоторые унаследованного кода, который использует printf
с лонги строк (без фактического форматирования), чтобы распечатать обычные текстовые заголовки таблицы, которые выглядит умозрительно, как это:центр текст фиксированной ширины поля с потоковыми манипуляторов в C++
| Table | Column | Header |
, которые в настоящее время производится следующим образом:
printf("| Table | Column | Header |");
Я хотел бы произвести выше с кодом к действию :
outputStream << "|" << std::setw(10) << std::center << "Table"
<< "|" << std::setw(10) << std::center << "Column"
<< "|" << std::setw(9) << std::center << "Header"
<< "|" << std::endl;
, который не компилируется, поскольку <iomanip>
имеет потоковые манипуляторы std::left
, std::right
и std::internal
, но, кажется, не имеют каких-либо std::center
. Есть ли чистый способ сделать это уже в стандартных библиотеках C++, или мне придется вручную вычислить необходимый интервал?
Несмотря на то, что это более многословным, чем код C, это будет менее многословным в долгосрочной перспективе из числа printf
заявлений и количества инфиксальный дублирования в их строках. Он также будет более расширяемым и поддерживаемым.
Ah !! Мне нравится это. Очень умно. –
+1. Я протестировал его здесь: [test-code] (http://stacked-crooked.com/view?id=f4728b397853f9c9d788f268d121b466) – Nawaz
Это хорошо только для C++ 0x? В MSVS 2010 я получаю «аргументы шаблона по умолчанию разрешены только для шаблона класса». Согласно [этому ответу SO] (http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates) это было исправлено в C++ 0x. –