Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

dodawanie folding

Ostatnio zmodyfikowano 2020-03-24 19:00
Autor Wiadomość
Xgrod
Temat założony przez niniejszego użytkownika
dodawanie folding
» 2020-03-24 14:59:13
C/C++
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 ?
P-176465
nanoant20
» 2020-03-24 17:26:48
typowy szablon rekurencyjny
C/C++
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;
}
P-176466
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):
C/C++
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
P-176467
Xgrod
Temat założony przez niniejszego użytkownika
» 2020-03-24 17:55:31
Dziękuję bardzo. Zamykam temat.
P-176468
Xgrod
Temat założony przez niniejszego użytkownika
» 2020-03-24 18:33:51
Jednak jeszcze jedno pytanie
C/C++
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 ?
P-176469
pekfos
» 2020-03-24 19:00:40
Coś takiego nigdy nie zadziała. Możesz co najwyżej osiągnąć to:
C/C++
cout << get_me < 2 >( 1, 2.5,( string ) "OLA", true ) << endl;
Jeśli mimo to chcesz coś takiego, to możesz sobie opakować std::get<>: https://en.cppreference.com/w​/cpp/utility/tuple/get
P-176470
« 1 »
  Strona 1 z 1