Another generic program that won't compile with pointee, bind, and array
Here's another (simplified) program I can't get to work.
I'm trying to write a generic routine that finds the largest element of a
sequence.
It is assumed that element->size() is defined, as it is for boost::array and
std::string.
For some reason, the Largest template function works okay for std::strings,
but not for boost::arrays.
Can you tell me what is wrong?
Will you please offer some improvements for error detection and debugging
techniques that would have helped here?
Perhaps I need a "typename" or "template" somewhere.
Take it as given that I have a String class that needs to be a fixed-size
array.
Here's the code:
#include
Terry G wrote:
Here's another (simplified) program I can't get to work. I'm trying to write a generic routine that finds the largest element of a sequence. It is assumed that element->size() is defined, as it is for boost::array and std::string. For some reason, the Largest template function works okay for std::strings, but not for boost::arrays. Can you tell me what is wrong?
This is a bug in boost::array, its size() function is static. You can remove the 'static' in your local copy and make it size_type size() const; to match TR1 and the future C++ standard.
template <class InIter> InIter Largest(InIter first, InIter last) { typedef typename boost::pointee<InIter>::type ObjType; InIter largest = std::max_element(first, last, boost::bind(std::lessstd::size_t(), boost::bind(&ObjType::size, _1),
Here: the problem is that &ObjType::size takes no arguments when ObjType is boost::array.
boost::bind(&ObjType::size, _2)) );
You can rewrite this as boost::bind(&ObjType::size, _1) < boost::bind(&ObjType::size, _2) BTW.
return largest; } // Largest
participants (2)
-
Peter Dimov
-
Terry G