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

[c++][STL] przeładowanie fukcji kontenera

Ostatnio zmodyfikowano 2017-02-21 15:26
Autor Wiadomość
aaadam
Temat założony przez niniejszego użytkownika
[c++][STL] przeładowanie fukcji kontenera
» 2017-02-21 10:12:28
Witam, chciałem się dowiedzieć czy można przeładować funkcje 'push' lub zdefiniowanie nowej w kontenerach stl-owych(konkretnie interesuje mnie lista), jeżeli tak to proszę o przykład.
Pozdrawiam
P-158091
mateczek
» 2017-02-21 10:45:22
napisz co chcesz zrobić bo takie pytanie o przeładowanie funkcji kontenera, który jest szablonem jest, dla mnie (przyznaję się bez bicia, że ekspertem to ja nie jestem), trochę dziwne.
P-158093
michal11
» 2017-02-21 11:06:16
W implementacji biblioteki bez jej zmiany (czyli w uproszczeniu bez zmiany pilików kompilatora) nie jest to możliwe ale możesz napisać swoją klasę dziedziczącą z lista i tam sobie przeładować co chcesz z tym, że musisz pamiętać, że te funkcje nie są wirtualnie więc nie zadziała polimorfizm (czyli praktycznie nigdy z tego nie skorzystasz bo kontenery powinno przekazywać się przez referencję aby uniknąć zbędnego kopiowania).
P-158094
aaadam
Temat założony przez niniejszego użytkownika
» 2017-02-21 11:46:51
mam np. stukture:
C/C++
struct str
{
    int x;
};
i liste tych stuktur
podczas dodawania do listy chcę sprawdzać czy jakiś node listy ma wartość x==5, jeżeli tak to reagować w fukcji Push, wiem że mogę sprawdzać wcześniej całą liste...
w sumie chyba na to samo wyjdzie.
P-158095
mateczek
» 2017-02-21 14:19:31
mi się nasuwa napisanie własnej klasy listy z kontenerem jako elementem składowym
C/C++
class m_lista {
    std::list < mstruct > lista
    bool bylaPiatka;
public:
    m_lista() {
        bylaPiatka = false;
        lista.clear();
    }
    push( mstruct & element ) {
        if( bylaPiatka ) {
            //instrukcje
        }
        if( element.x == 5 ) {
            bylaPiatka = true;
        }
        lista.pushback( element )
    }
}
P-158104
michal11
» 2017-02-21 14:44:32
Własne sprawdzanie jest lepsze, przede wszystkim jeżeli w funkcji push sprawdzałbyś czy obiekt już istnieje to naruszyłbyś kontrakt bo to wtedy nie byłby bezwarunkowy push tylko push unique. Po drugie tak jak wspomniałeś i tak w tej funkcji musiałbyś zrobić przeszukiwanie albo jakiś cache więc to w niczym za bardzo ci nie ułatwia pracy. I po trzecie co by się miało stać gdy nie doda elementu do list, powinna być jakaś sygnalizacja takiego stanu, w jaki sposób? zwracanie boola zmieni API tej klasy, olanie tego będzie nie jasne, nie ma dobrego wyjście bez gruntownych zmian.
P-158105
aaadam
Temat założony przez niniejszego użytkownika
» 2017-02-21 15:26:27
ok dzięki
P-158107
« 1 »
  Strona 1 z 1