dodawanie folding
Ostatnio zmodyfikowano 2020-03-24 19:00
Xgrod Temat założony przez niniejszego użytkownika |
dodawanie folding » 2020-03-24 14:59:13 template < typename T, typename...Args > int get_me( T t, Args...args ) { return t + get_me( args...); } int main() { cout << get_me( 3, 6, 4, 7 ) << endl; return 0; } Wywala taki błąd recursively required from 'int get_me(T, Args ...) [with T = int; Args = {int, int}]'| Jak to zrobić aby działało ? |
|
nanoant20 |
» 2020-03-24 17:26:48 typowy szablon rekurencyjny template < typename...Args > int get_me( Args...args );
template < typename T, typename...Args > int get_me( T t, Args...args ) { return t + get_me( args...); } int get_me() { return 0; } template <> int get_me() { return 0; } |
|
pekfos |
» 2020-03-24 17:49:47 Jeśli masz wystarczająco nowy kompilator, możesz użyć fold expression (dostępne od C++17): template < typename...Args > int get_me( Args...args ) { return( 0 +...+ args ); } int main() { cout << get_me( 3, 6, 4, 7 ) << endl; return 0; } https://en.cppreference.com/w/cpp/language/fold |
|
Xgrod Temat założony przez niniejszego użytkownika |
» 2020-03-24 17:55:31 Dziękuję bardzo. Zamykam temat.
|
|
Xgrod Temat założony przez niniejszego użytkownika |
» 2020-03-24 18:33:51 Jednak jeszcze jedno pytanie template < typename T, typename...Args > auto get_me( int nr, T && t, Args &&...args ) { if( nr == 0 ) { return t; } nr--; return get_me( nr, args...); } Funkcja ma zwrócić określony element (nr). np: cout << get_me( 2, 1, 2.5,( string ) "OLA", true ) << endl; powinno wyświetlić OLA.Niestety potrzeba jeszcze jakiś deklaracji funkcji. Jakich ? |
|
pekfos |
» 2020-03-24 19:00:40 |
|
« 1 » |