[ glorius @ 23.12.2011. 16:05 ] @
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).

[ Nedeljko @ 25.12.2011. 15:37 ] @
a << b je sinonim za a.operator<<(b).