2017-10-17 4 views
0

Nous savons que le fichier std :: setw() n'influence que la sortie suivante.std :: setw pour tout l'opérateur << du type défini par l'utilisateur

Alors, que pratique standard pour aligner l'opérateur toute < < de type défini par l'utilisateur en sortie de table:

class A 
{ 
    int i, j; 
public: 
    friend ostream& opeartor<<(ostream& out, const A& a) { 
      return << "Data: [" << i << ", " << j << "]"; 
    } 
} 

// ... 
A[] as; 
out << std::left; 
for (unsigned i = 0; i < n; ++i) 
    out << std::setw(4) << i 
     << std::setw(20) << as[i] // !!! 
     << std::setw(20) << some_strings[i] 
     << some_other_classes[i] << std::endl; 
out << std::right; 

Répondre

0

il suffit d'ajouter une méthode setw() à votre classe:

class A 
{ 
    int i, j; 
    mutable int width = -1; 

public: 
    A& setw(int n) { 
     this->width = n; 
     return *this; 
    } 

    friend ostream& operator<<(ostream& out, const A& a); 
}; 

Et lorsque vous l'imprimez, si vous souhaitez l'aligner, utilisez-le simplement:

int main() { 
    A as[5]; 
    for (auto & a : as) 
     cout << a.setw(15) << endl; 
} 
+0

Qu'en est-il de la façon dont * ils * l'entendent? Ou devraient-ils commencer à modifier cet 'opérateur <<' pour chaque format dont ils ont besoin? Et s'ils * ont * besoin de formats différents? – StoryTeller

+0

@StoryTeller, j'ai amélioré ma réponse afin qu'elle permette de formater la classe sur demande –