Hi! Well, I'm new to operator overloading, and I found this problem. Instead of documenting myself, I prefer to ask you :D
The point is, I know how to do simple operator overloading, but I'm facing problems with stacking operators. I'll try to put a relatively simple example:
struct dxfdat
{
int a;
string b;
/* here is the question */
}
/* use: */
dxfdat example;
example << "lalala" << 483 << "puff" << 1029 << endl;
"lalala" << 483 << "puff" << 1029 << endl
shall be stored in b
.
dxfdat& operator<< (T a)
and things like that work with one parameter (example << 7)
, but I would like it to work in a 'cout
' fashion.
Sorry to be so lazy.
EDIT:
The real thing... Ok, it is a little bit trickier... actually, b isn't a string, but a vector of other objects, and example << "lalala" << 483 << "puff" << 1029 << endl
should just create just one object.
This is what I'm trying (translated), though I have no clue on how to tell it when to create the object (as it goes from left to right, doesn't it?):
struct dxfDato
{
dxfDato(int c = 0, string v = 0, int t = 0) { cod = c; val= v; ty = t; }
int ty;
int cod;
string val;
};
struct dxfItem
{
int cl;
string val;
vector<dxfDato> dats;
vector<dxfItem> sons;
template <class T>
dxfItem &operator<<(const T &t)
{
dxfDato dd;
std::stringstream ss;
ss << t;
val = ss;
dats.push_back(dd); // this way, it creates a lot of objects
return d;
}
};
dxfItem headers;
headers << "lalala" << 54789 << "sdfa" << 483 << endl;
// this should create *just one object* in dats vector,
// and put everything on string val
Thanks for everything,
Note: I had to extract and translate a lot of things to put it here, so I didn't check the code for stupid errors.
(Sorry for expanding the question that much, please tell me if I'm misusing stackoverflow's question system)