VC++ 5.0 and STL predicates

Question:
How can I provide my own predicate for the list::sort method in Visual C++ 5.0? The method appears to require that any function object passed must be derived from greater but in stepping through the code in the debugger, I noticed that my function object is cast to a base class (std::binary_function) that has a non-virtual operator() method so my operator() never gets called. Am I missing something?

Answer:
There is no such restriction for the comparison algorithm for sort in STL.As a matter of fact, there is not a single place where STL relies on virtual functions. If your compiler’s implementation casts thecomparator to the base class’ version, that is a serious bugin the implementation.

Here is the definition of list::sort as perthe draft standards:

template  >class list{  // other stuff template  void sort (Compare comp)};
Here the only restriction on the Compare type is that it must havea publically visible function call operator [operator ()()].

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: