class Widget;
std::vector< std::shared_ptr<Widget> > container
class Criterium
{
public:
bool operator()(const Widget& left, const Widget& right)const;
};
How can I sort the container according to the Criterium, without defining another criterium like:
class CriteriumForPointers
{
public:
bool operator()(const std::shared_ptr<Widget>& left,
const std::shared_ptr<Widget>& right)const;
};
You could use a lambda as an adapter:
Criterium criterium;
sort(container.begin(), container.end(),
[&criterium] (const shared_ptr<Widget> &l, const shared_ptr<Widget> &r)
{
return criterium(*l.get(), *r.get());
}
);