Привет!
Подскажите как поступить, если требуется использовать в функторе-компараторе внешний объект большого размера? Т.е. делать этот внешний объект членом-данных компаратора мне кажется не приемлимо — как минимум накладные расходы на копирование будут большими. Схематически моя ситуация выглядит так:
// Этот класс умеет сравнивать объекты типа Item, но он большого размера
class Big {
public:
bool less_then(Item param1, Item param2);
};
// Хочу написать компаратор, чтобы использовать его в алгоритме sort для сортировки контейнера элементов типа Item
class my_comparator {
public:
// Надо как-то передать ему внешний объект bigObj
my_comparator( const Big& _bigObj ) : ??? // Но как именно не знаю
{
}
bool operator()(const Item& t1, const Item& t2) {
return bigObj.less_then(t1, t2); // с помощью этого внешнего объекта сравниваем Item t1 и Item t2
}
private:
// Как хранить в данном компараторе внешний объект bigObj ?
}
// использование
void Foo::bar() {
Big bigObj; // объект bigObj
Initialize(bigObj); // инициализируем его, и т.п...
// контейнер, который нужно сортировать
vector<Item> v;
// Заполняем v
// для сортировки нужен функтор, который использует bigObj
std::sort(v.begin(), v.end(), my_comparator (bigObj) );
}
Как вариант можно хранить в my_comparator ссылку на bigObj:
class my_comparator {
public:
my_comparator( const Big& _bigObj ) : bigObj (_bigObj)
{
}
private:
Big& bigObj;
Но что-то мне подсказывает, что это плохой вариант...
Спасибо.