Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: Beginner
Jul 18, 1997

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 the comparator to the base class' version, that is a serious bug in the implementation.

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

template  >
class list
{ 
 // other stuff

 template  void sort (Compare comp)
};
Here the only restriction on the Compare type is that it must have a publically visible function call operator [operator ()()].
DevX Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date