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');