2015-04-17 2 views
3

Je viens de remarquer que je suis en utilisant le code suivant dans mon application C++ 11 (qui fonctionne très bien calme):fonction de la bibliothèque standard pour convertir un objet opérateur fournissant << à un std :: string

template <typename T> 
std::string output_streamable_to_string(T const& kObject) { 
    std::ostringstream os; 
    os << kObject; 

    return os.str(); 
} 

donc ma question est: est-ce une fonction existe dans la bibliothèque standard (std) qui fournit cette fonctionnalité?

Je sais que std::to_string existe, mais qui ne fonctionne qu'avec les types de données standard Library. Je veux convertir un boost::asio::ip::udp::endpoint en std::string. Depuis le boost::asio::ip::udp::endpoint fournit seulement une fonction operator<<, j'ai besoin de convertir le std::ostream en std::string.

+2

Je crains qu'il est déjà la façon de le faire :-) Standard Library il –

+0

ce que vous voulez que l'on appelle la sérialisation. Découvrez [protobuf] (https://developers.google.com/protocol-buffers/docs/overview), [msgpack] (https://github.com/msgpack/msgpack-c) ou quelque chose comme [serializer picojson] (https://github.com/d-led/picojson_serializer) –

+0

@Dmitry Ledentsov: L'utilisation d'une bibliothèque/framework de sérialisation est ** complètement ** exagérée. Je veux juste convertir un type de données ou un objet simple en 'std :: string'. @ForEveR a répondu à la question. Je suis au courant des deux premières bibliothèques que vous avez mentionnées. –

Répondre

5

Non, il n'y a pas de telle fonction en C++ standard. Mais puisque vous utilisez boost - vous pouvez utiliser boost::lexical_cast, ou simplement utiliser le vôtre.

+1

Vraiment triste. : D Mais puisque j'utilise déjà Boost.Asio dans mon projet actuel, je vais utiliser 'boost :: lexical_cast' (déjà oublié). Je garderai la fonction dans mon post original pour les projets qui n'ont pas besoin de Boost. –

+1

boost's lexical_cast est de toute façon une bibliothèque d'en-têtes, donc cela ne devrait pas avoir d'importance si vous incluez simplement cela dans un projet qui n'utilise pas 'boost' car il n'y aura pas de dépendances externes. et comme il est modélisé l'augmentation de la taille devrait seulement être petite – CommanderBubble