Jon Stewart on Mon, 22 Mar 2004 20:14:49 -0600 (CST)


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

Re: [ALACPP] copy_if?


> Okay, new wrinkle here. At lunch, John pointed me to:
> 
> std::replace_copy_if()
> 
> as the hackish-but-workable solution to my copy_if function.
> So, I quickly hacked this up:
> 
> template<typename InputIterator, typename OutputIterator,
> 	 typename Predicate>
> inline OutputIterator copy_if(InputIterator first, InputIterator last,
> 			      OutputIterator result, Predicate pred)
> {
> 	return std::remove_copy_if(first, last, result, boost::not1(pred));
> }
> 
> Here's the funny thing. This works if I invoke it with:
> 
> copy_if(temp.begin(), temp.end(), ostream_iterator<string>(cout, "\n"),
> 	sillyUnaryFunction);
> 
> But it fails with:
> 
> copy_if(temp.begin(), temp.end(), ostream_iterator<string>(cout, "\n"),
> 	boost:bind(sillyBinaryFunction, _1 value));
> 
> Seems like a classic case of boost's funky type theory killing me. I
> have yet to figure out the exact nature of the problem. It's worth
> noting that my original implementation handed both cases with aplomb.


Probably a boost::bind usage error (not uncommon). Do you have a comma 
after "_1" in your source?


> Not sure if std::remove_copy_if() is a net win really.


Yeah, copy_if is so nice and simple that it doesn't benefit too much from 
code reuse.


Jon
-- 
Jon Stewart                                 Advanced Los Angeles C++
stew1@xxxxxxxxxxx                           http://www.alacpp.org
_______________________________________________
alacpp mailing list
alacpp@xxxxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/alacpp