2017-08-08 4 views
0

Je voudrais savoir comment puis-je insérer un paramètre dans un std :: basic_ostream J'ai essayé, mais je ne peux passtd :: basic_ostream avec le paramètre

je besoin d'insérer un paramètre pour sélectionner les valeurs de Arista Je veux imprimer une fois que je suis le paramètre inséré à l'étape suivante est facile car il est juste une condition if

template <typename charT> 
friend std::basic_ostream<charT> &operator << (
    std::basic_ostream<charT>& out, Familia &familia 
    ) { 
    out << "\t Relaciones\n"; 
    for (Vertice<cedula, relacion> &vertice : familia) { 
     int per = vertice.getFuente(); 
     for (Arista<cedula, relacion> &arista : vertice) { 
      out << per << "->"; 
      out << arista.getDestino() << " es" << " " << arista.getValor() << "\n"; 
     } 
    } 
    return out; 
} 
+0

ce n'est pas clair ce que vous demandez. Vous semblez bien insérer dans l'ostream. Avez-vous une erreur? Quel est le problème exact? – bolov

+2

Peut-être créer une fonction de filtre qui retourne une instance d'un objet 'Familia' contenant uniquement les informations dont vous avez besoin? Ou vous pourriez voir comment [manipulateurs standard] (http://en.cppreference.com/w/cpp/io/manip) aiment par exemple ['setw'] (http://en.cppreference.com/w/cpp/io/manip/setw) fonctionne, et modéliser une solution basée sur cela? –

+0

oh, maintenant je comprends. Ici, jetez un oeil à ces: https://stackoverflow.com/questions/799599/c-custom-stream-manipulator-that-changes-next-item-on-stream, https://stackoverflow.com/questions/ 15053753/writing-a-manipulator-for-a-custom-stream-class, https://stackoverflow.com/questions/1328568/custom-stream-manipulator-for-class – bolov

Répondre

2

il y a des façons dont vous pouvez ajouter un comportement personnalisé et état à la norme classes de flux via des manipulateurs de flux. Mais personnellement, je pense que c'est trop de frais généraux. Ce que je vous suggère que définir un nouveau type qui accepte le paramètre et Familia référence, et procède ensuite à imprimer:

class FormattedFamilia { 
    Familia const& _to_print; 
    int _parameter; 
public: 
    FormattedFamilia(int parameter, Familia const& to_print) 
    : _parameter(parameter), _to_print(to_print) 
    {} 

    template <typename charT> 
    friend std::basic_ostream<charT> &operator << (
    std::basic_ostream<charT>& out, FormattedFamilia const & ff 
) { 
    if(_parameter > 0) { 
     // do printing using out. 
    } 
    } 
}; 

Il devrait être une classe d'ami de Familia, bien sûr. Et l'utiliser serait aussi simple que cela:

cout << FormattedFamilia(7, familia);