Как хранить внешний объект в функторе?
От: Аноним  
Дата: 18.10.10 10:41
Оценка:
Привет!

Подскажите как поступить, если требуется использовать в функторе-компараторе внешний объект большого размера? Т.е. делать этот внешний объект членом-данных компаратора мне кажется не приемлимо — как минимум накладные расходы на копирование будут большими. Схематически моя ситуация выглядит так:

// Этот класс умеет сравнивать объекты типа 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;


Но что-то мне подсказывает, что это плохой вариант...

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.