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

z ciekawości c++14

Ostatnio zmodyfikowano 2016-02-24 18:00
Autor Wiadomość
mateczek
Temat założony przez niniejszego użytkownika
z ciekawości c++14
» 2016-02-24 08:44:10
Tak mnie zastanawia czy zmienna auto w nowym standardzie spowoduje, że szablony zaczną wychodzić z użycia??
skoro już teraz mogę przy pomocy 'auto' napisać prosty algorytm sortujący dla różnych typów i bez użycia szablonów?? A może coś źle rozumuję ??


Przykład sortowania bąbelkowego dla tablic różnych typów.

C/C++
#include <iostream>
using namespace std;

//funkcja sortująca sortowanie bąbelkowe
void sortowanie( auto tab[] ) {
    for( int i = 0; i < 5; i++ ) {
        for( int j = 0; j < 4; j++ ) {
            if( tab[ j ] > tab[ j + 1 ] )
                 std::swap( tab[ j ], tab[ j + 1 ] );
           
        }
    }
   
}

//własna klasa z przeładowanym operatorem
struct czlowiek {
    string imie;
    int wiek;
    bool operator >( czlowiek & drugi ) {
        return wiek > drugi.wiek;
    }
};



int main() {
    //dwie tablice do posortowania
    int tablica[] = { 1, 5, 2, 4, 3 };
    czlowiek tablica1[] = { { "marek", 30 }, { "piotrek", 21 }, { "kasia", 22 }, { "jurek", 28 }, { "basia", 32 } };
   
    sortowanie( tablica );
    //wyświetlanie posortowaniej tablicy
    for( int i = 0; i < 5; i++ ) {
        cout << tablica[ i ] << " ";
    }
    cout << endl;
   
   
    sortowanie( tablica1 );
    //wyświetlanie posortowaniej tablicy
    for( int i = 0; i < 5; i++ ) {
        cout << tablica1[ i ].imie << " " << tablica1[ i ].wiek << endl;
    }
   
}
P-145243
Gibas11
» 2016-02-24 09:36:45
Nie zaalokujesz dynamicznie dodatkowej pamięci (kod1*) , nie utworzysz dodatkowych obiektów danego typu, jeżeli są NonCopyable i kilka innych wad, ale w większości zastosowań się sprawdza.

*kod1
C/C++
void p( auto * i )
{
    i = new auto; //?
}
Ps. dzięki, przypomniałeś mi, że muszę zaktualizować gcc i g++. ;)
P-145244
carlosmay
» 2016-02-24 09:47:21
C/C++
template < typename T >
void print( const T & collection, std::string & opt = "" ) {
    std::cout << opt;
    for( const auto & elem: collection ) {
        std::cout << elem << ' ';
    }
    std::cout << std::endl;
}

Cała biblioteka std to szablony. Nie sądzę żeby
auto
 w jakikolwiek sposób
miało szansę je wyprzeć.
Jak w tym przykładzie można by bez użycia szablonu do funkcji przekazać prawie dowolny kontener?

edit: poprawione.
P-145245
Gibas11
» 2016-02-24 10:00:39
@up
C/C++
#include <iostream>
#include <string>
#include <vector>
#include <list>

void print( const auto & collection, std::string & opt = "" ) {
    std::cout << opt;
    for( const auto & elem: collection ) {
        std::cout << elem << ' ';
    }
    std::cout << std::endl;
}

int main()
{
    std::vector < int > vektor;
    for( int i = 5; i < 12; i++ )
         vektor.push_back( i );
   
    std::list < int > lista;
    for( int i = 0; i < 6; i++ )
         lista.push_back( i * 5 );
   
    std::string tmp = "";
    print( vektor, tmp );
    print( lista, tmp );
   
    return 0;
}
Ps, twoje rozwiązanie też nie obsługuje wszystkich kontenerów, patrz – std::map.
P-145246
pekfos
» 2016-02-24 11:12:14
C/C++
void p( auto * i )
{
    i = new auto; //?
}
decltype() + std::remove_pointer<> i po problemie.
P-145247
Monika90
» 2016-02-24 15:30:07
C/C++
void sortowanie( auto tab[] )
{
}

Parametry funkcji nie mogą być typu auto w obecnie obowiązującym standardzie C++ (*), ale w przyszłym C++17 być może będą mogły być, (a jak nie w C++17, to w tzw. Concepts TS). Wtedy powyższa definicja będzie równoważna tej
C/C++
template < class T >
void sortowanie( T tab[] )
{
}
więc od szablonów nie uciekniesz.
 

(*) Nie dotyczy wyrażeń lambda.
P-145252
Gibas11
» 2016-02-24 15:50:36
@up
W C++14 (w przeciwieństwie do 11) gcc 5.3 nie narzeka na taką definicję, nie ma nawet ostrzeżeń.
P-145253
Monika90
» 2016-02-24 16:30:29
Dodali, choć to niestandardowe, bo uważali że jest to użyteczne. To że GCC kompiluje kod bez ostrzeżeń nie oznacza że kod jest zgodny ze standardem.
P-145256
« 1 » 2
  Strona 1 z 2 Następna strona