Centre de texte de largeur fixe de terrain avec ruisseau des manipulateurs en C++

Je suis refactoring un code existant qui est à l'aide de printf à longues chaînes (sans mise en forme) à imprimer texte brut en-têtes de tableau qui semble théoriquement comme ceci:

|  Table   |  Column  | Header  |

qui sont actuellement en production comme ceci:

printf("|  Table   |  Column  | Header  |");

Je voudrais produire de la ci-dessus avec le code de l'effet de1:

outputStream << "|" << std::setw(10) << std::center << "Table"
             << "|" << std::setw(10) << std::center << "Column"
             << "|" << std::setw(9) << std::center << "Header"
             << "|" << std::endl;

qui ne compile pas car <iomanip> a le flux des manipulateurs std::left, std::right et std::internal, mais ne semble pas avoir de std::center. Est-il un moyen propre de faire cela déjà dans les bibliothèques C++ standard, ou vais-je avoir à calculer manuellement l'espace nécessaire?


1Même si c'est plus détaillé que le code C, il sera moins détaillé dans le long terme, parce que le nombre de printf consolidés et le montant de infixés les chevauchements dans leurs cordes. Il sera également plus extensible et facile à entretenir.

OriginalL'auteur Keith Pinson | 2013-02-13