2010-05-13 4 views
1

J'utilise une fonction qui reçoit ostream mais j'ai wostream est-il un moyen de convertir l'un à l'autre?Comment puis-je convertir de wostream à ostream

en particulier je veux utiliser boost :: write_graphviz qui prend ostream mais je suis actuellement en < opérateur pour wostream.

Répondre

0

Je ne crois pas que vous pouvez convertir. Vous devrez obtenir un ostream.

+0

Bien sûr, vous pouvez les convertir en utilisant un adaptateur. –

0

Si j'étais vous je changerais plutôt mon approche, plutôt que d'essayer de convertir wostream à ostream. Je suis sûr que ce que vous voulez obtenir peut facilement être atteint sans larges flux de caractères. Bien sûr, cela dépend de l'objectif réel de votre application, mais dans 9 cas sur 10, une simple implémentation de votre propre routine de conversion ou l'utilisation de bibliothèques tierces (par exemple iconv) serait évidemment suffisante.

Mise à jour: (comme une preuve de ce que je veux dire) code Google n'a qu'un seul résultat de recherche pour wofstream et deux - pour wifstream. Est-ce que ce fait ne parle pas d'elle-même?

0

Si la sortie graphique ne dispose pas d'un opérateur wostream alors vous pouvez le faire:



std::wstring convert(std::string const& s) 
{ 
    unsigned char const* tmp = reinterpret_cast<unsigned char const*>(s.data()); 

    std::wstring res = std::wstring(tmp, tmp + s.size()); 

    return res; 
} 

void f(std::wostream & out) 
{ 
    std::ostringstream gout; 
    gout << graph; // or whatever... 
    out << convert(gout.str()); 
} 

Le casting est nécessaire si votre chaîne peut avoir une valeur supérieure à 177. Si elle peut le tour en caractères étranges parce que le cast que le constructeur wstring va faire des négatifs en négatifs au lieu de la copie rectiligne.

Questions connexes