Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Univerzalno koriscenje operatora <<

[es] :: C/C++ programiranje :: Univerzalno koriscenje operatora <<

[ Pregleda: 1232 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Univerzalno koriscenje operatora <<23.12.2011. u 16:05 - pre 149 meseci
Svideo mi se nacin kako Qt insertuje objekat u listu pomocu operatora << pa sam taj nacin poceo da koristim i sa STL kontejnerima tako sto sam dodao funkcionalnost za operator <<:

Code:


template <typename T>
class MyList : public std::list<T>
{
public:
    MyList& operator << (const T& elem);
};

template <typename T>
MyList<T>& MyList<T>::operator <<(const T &elem)
{
    push_back(elem);
    return *this;
}



Tako da se sada lista moze popunjavati na sledeci nacin:

Code:


MyList<std::string> data;
data << "Jedan";
data << "Dva";
data << "Tri";



Kasnije sam uvideo da postoji bolji nacin gledajuci operator << za ostream koji mi je dao ideju:

Code:


template <typename T>
std::list<T>& operator << (std::list<T>& list, const T& elem)
{
    list.push_back(elem);
    return list;
}



Ovo "magicno" dodaje funkcionalnost klasi std::list da koristi operator << kao u Qt-u.

Code:


std::list<std::string> data;
data << "Jedan";
data << "Dva";
data << "Tri";



Do sada sam mislio da je overload operatora << vezan samo za ostream i da posebne STL konstrukcije omogucavaju koriscenje operatora << na gore navedeni nacin i
prijatno sam se iznenadio kada sam video da operator << moze da se koristi i za druge stvari.

Uprosticu primer za operator << da bi se lakse razumelo pitanje:

Code:


std::list<int>& operator << (std::list<int>& list, const int& elem)
{
    list.push_back(elem);
    return list;
}



Glavno pitanje se odnosi na overload operatora << ( koji sam pre sretao samo u kombinaciji sa ostream i istream ( >> ) objektima ).

Zanima me kako sada aplikacija zna da pozove ovaj operator za list objekat kada pozovem u kodu, npr data << 3;?
Da li je to priroda operatora << i da li unapred definisano da potpis funkcije mora biti strogo definisan na ovaj nacin da bi kompajler odredio koji je levi a koji desni operand operator <<?
Mozda je prosto objasnjenje ali trenutno ne mogu da shvatim kako ovo funkcionise (mozda mi je negde promaklo).


EOF
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Univerzalno koriscenje operatora <<25.12.2011. u 15:37 - pre 149 meseci
a << b je sinonim za a.operator<<(b).
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Univerzalno koriscenje operatora <<

[ Pregleda: 1232 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.