Jason Fredrickson on 15 Aug 2003 17:29:18 -0000


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

RE: [ALACPP] container streaming, sigh


Well, I'd just create some global function, so:

Namespace _Utility
{
	void Serialize(ostream &lhs, const string &rhs) {
		lhs << rhs << std::endl; }
}

ostream& operator << (ostream& str, const vector<string> & rhs) {
	for_each(rhs.begin(), rhs.end(),
boost::bind(&_Utility::Serialize, str, _1));
	return str;
}

You still have the function, but you don't need all the reification
overhead - bind does that for you.

Jason

Jason Fredrickson
Vice-President, Operations
Agile Solutions
Jason.Fredrickson@xxxxxxxxxxxx
(626) 644-7280
 


> -----Original Message-----
> From: alacpp-bounces@xxxxxxxxxxx 
> [mailto:alacpp-bounces@xxxxxxxxxxx] On Behalf Of Gavin Doughtie
> Sent: Friday, August 15, 2003 10:18 AM
> To: ALACPP Mailing List
> Subject: [ALACPP] container streaming, sigh
> 
> 
> ok, how about this. I want operator<<(ostream& str, 
> vector<string> vals)
> 
> This is my current implementation:
> 
> class Outputter
> {
> public:
>     Outputter(ostream& str)
>         :mStr(str) {}
> 
>     ostream& operator()(const string &rhs) {
>         return mStr << rhs << endl;
>     }
> 
> private:
>     ostream& mStr;
> };
> 
> ostream& operator << (ostream& str, const vector<string> & rhs) {
>     for_each(rhs.begin(), rhs.end(), Outputter(str));
>     return str;
> }
> 
> But I think the whole Outputter class thingie can be ditched 
> in favor of a clever bind, which I can't seem to get right. 
> Volunteers?
> 
> Gavin
> _______________________________________________
> alacpp mailing list
> alacpp@xxxxxxxxxxx http://lists.ellipsis.cx/mailman/listinfo/alacpp
> 


_______________________________________________
alacpp mailing list
alacpp@xxxxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/alacpp