Abstract base class as template parameter (for std::set comparator)
I'm creating std::set objects with my own comparators. My comparators
are in following hierarchy, rooted at the abstract base class
BaseCompare:
class BaseCompare
{
virtual bool operator()(const SomeOtherClass &lhs, const
SomeOtherClass &rhs) const = 0;
};
class ACompare : BaseCompare
{
bool operator()(const SomeOtherClass &lhs, const SomeOtherClass
&rhs) const
{
...
}
};
class BCompare : BaseCompare
{
bool operator()(const SomeOtherClass &lhs, const SomeOtherClass
&rhs) const
{
...
}
};
I want to dynamically set what comparator is used when I create a
set. I want to be able to do something like this:
void something(BaseCompare &compareRef)
{
std::set<SomeOtherClass, BaseCompare> aSet(compareRef);
...
}
Here I'd pass either an ACompare or a BCompare. Unfortunately, my
compiler complains about BaseCompare's virtual function. Is there a
way to fix this?
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]