Stream operator<<, C++17 Fold Expressions und extra Leerzeichen



  • Hallo zusammen!

    Kennt jemand eine gute Lösung für dieses Problem?:

    #include <iostream>
    #include <string>
    
    template <typename... Ts>
    void print_types()
    {
        // Das wäre nett:
        //
        // (std::cout << ... << (" " << typeid(Ts).name())) << std::endl;
        //
        // Da aber der Ausdruck mit dem Parameter Pack geklammert werden muss, wird
        // (" " << typeid(Ts).name()) zuerst ausgewertet, was natürlich nicht
        // funktioniert, da " " selbstverständlich nicht zu std::cout evaluiert.
        (std::cout << ... << typeid(Ts).name()) << std::endl;
        // Funktioniert, ist aber nicht ganz so schön ...
        (std::cout << ... << (std::string{ typeid(Ts).name() } + " ")) << std::endl;
    }
    
    auto main() -> int
    {
        print_types<int, float, bool>();
    }
    

    Soweit ich das sehe, ist das so wie der operator<< bei Streams funktioniert, mit keiner der Fold Expressions machbar. Ich hoffe jedoch, eventuell eine pfiffige Lösung übersehen zu haben.

    Es wäre gut, wenn man den temporären String vermeiden und das Leerzeichen direkt nach std::cout schreiben könnte. Natürlich lässt sich das auch erreichen, wenn man die Typen in einer Endrekursion iteriert, dann ist es aber kein eleganter Einzeiler mehr.



  • This post is deleted!

Log in to reply