Christopher Smith on Mon, 22 Mar 2004 19:03:02 -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.
Not sure if std::remove_copy_if() is a net win really.

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