[c++][STL] przeładowanie fukcji kontenera
Ostatnio zmodyfikowano 2017-02-21 15:26
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 |
|
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. |
|
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). |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2017-02-21 11:46:51 mam np. stukture: 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. |
|
mateczek |
» 2017-02-21 14:19:31 mi się nasuwa napisanie własnej klasy listy z kontenerem jako elementem składowym class m_lista { std::list < mstruct > lista bool bylaPiatka; public: m_lista() { bylaPiatka = false; lista.clear(); } push( mstruct & element ) { if( bylaPiatka ) { } if( element.x == 5 ) { bylaPiatka = true; } lista.pushback( element ) } } |
|
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. |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2017-02-21 15:26:27 ok dzięki |
|
« 1 » |