Variadic Template Beispiel



  • Hallo, ich versuche im Moment Variadic Templates (auf Stand von C++11/14) zu verstehen und anzuwenden.
    Dafür habe ich folgenden Code kopiert:

    void log(){}
    
    template<typename First, typename ...Rest>
    void log(First && first, Rest && ...rest)
    {
      std::cout << std::forward<First>(first) << " ";
      log(std::forward<Rest>(rest)...); 
    }
    
    

    Versuche ich ihn diesen Code mit std::endl aufzurufen, führt das zu einem Fehler
    no matching function for call to ‘log(<unresolved overloaded function type>)’.

    Woran liegt das und wie könnte man das zulassen?



  • Da könnte jetzt ein komplettes Programm stehen. Dann sähe man, was du gemacht hast und könnte es ausprobieren. Aber so ...



  • @manni66

    #include <iostream>
    
    void log(){}
    
    template<typename First, typename ...Rest>
    void log(First && first, Rest && ...rest)
    {
      std::cout << std::forward<First>(first) << " ";
      log(std::forward<Rest>(rest)...);
    }
    
    int main(int argc, char *argv[])
    {
    
      log("Hello", "brave","new","world!");
      log(std::endl);
    
      return 0;
    }
    


  • @ravenheart_ggg sagte in Variadic Template Beispiel:

    #include <iostream>

    int main(int argc, char *argv[])
    {

    log("Hello", "brave","new","world!");
    log(std::endl);

    return 0;
    }

    Narf.... dann ergänz doch deine log-Funktionen, jetzt haste zwei Hälften gepostet



  • std::endl ist selbst ein Template. Die Templateparameter sind hier aber noch nicht bekannt. Lösung: log(std::endl<char,std::char_traits<char>>); für std::cout.

    besser: log('\n');


Log in to reply