Я занимаюсь рефакторингом проекта C ++ 03 в C ++ 11.
У меня есть класс, в котором определен функтор для сортировки:
class Widget
{
public:
class SortByRules
{
public:
bool operator()(const Widget &lhs, const Widget &rhs) const;
}
}
Этот функтор используется в разных местах моего проекта.Пример использования:
std::vector<Widget> widgets;
// ...
std::sort(widgets.begin(), widgets.end(), Widget::SortByRules());
Насколько я понимаю, лямбды должны быть предпочтительнее функторов в C ++ 11.Но я не уверен, стоит ли мне просто использовать функтор в этом случае, потому что я хочу вызывать его во многих других классах на протяжении всего моего проекта.
Я думал о рефакторинге в нечто вроде следующего:
// .h
class Widget
{
public:
Widget();
std::function<bool(Widget&, Widget&)> SortByRules;
};
// .cpp
Widget::Widget() :
SortByRules([](Widget& lhs, Widget& rhs) { /* ... */ }
{
}
Обе эти реализации по сути одинаковы?Должен ли я предпочесть одно другому, и если да, то почему?