boost :: format und benutzerdefiniertes Drucken von Standardcontainern

Ich habe eine Funktion in meinem Namespacens das hilft mir, STL-Container zu drucken. Zum Beispiel:

template <typename T>
std::ostream& operator<<(std::ostream& stream, const std::set<T>& set)
{
    stream << "{";
    bool first = true;
    for (const T& item : set)
    {
        if (!first)
            stream << ", ";
        else
            first = false;
        stream << item;
    }
    stream << "}";
    return stream;
}

Dies eignet sich hervorragend zum Drucken mitoperator << direkt:

std::set<std::string> x = { "1", "2", "3", "4" };
std::cout << x << std::endl;

Verwenden Sie jedochboost::format ist unmöglich:

std::set<std::string> x = { "1", "2", "3", "4" };
boost::format("%1%") % x;

Das Problem liegt auf der Hand: Boost hat keine Ahnung, dass ich meinen Brauch verwenden möchteoperator << um Typen zu drucken, die nichts mit meinem Namespace zu tun haben. Außerhalb des Hinzufügens einesusing Erklärung inboost/format/feed_args.hppgibt es eine bequeme möglichkeit zu machenboost::format suche meineoperator <<?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage