На следующем примере мне нужно определить функцию для сравнения моих объектов с использованием определенных правил в методе getHappiness (Animal *). Метод не может быть статичным и довольно сложным. Мне нужно указатель в определении сравнения, чтобы вызвать метод getHappiness.Как передать переменную объекту функции?
Итак, мой вопрос: как передать указатель на этот метод, он автоматически вызывается, когда я вставляю элемент в карту. И также не кажется, что я могу создать экземпляр структуры сравнения и передать указатель на конструктор.
Я делаю что-то неправильно? Может быть, есть альтернативный способ определения функции сравнения?
struct Compare {bool operator()(Animal* const, Animal* const) const;};
bool
Compare::operator()(Animal* const a1, Animal* const a2) const {
Zoo* zoo; // somehow I need to get access to the Zoo instance here
if (zoo->getHappiness(a1) > zoo->getHappiness(a2)) return true;
return false;
}
Class Zoo(){
std::multimap<Animal*, Man*, Compare> map;
int getHappiness(Animal*); // cannot be static
}
int main(){
...
Zoo zoo;
zoo.map.insert(...);
...
}
Вы можете сделать его параметром шаблона для вашего функтора 'Compare'. Я не думаю, что имеет смысл иметь возможность предоставлять значение времени выполнения для пользовательского Compare на 'std :: multimap' в любом случае. – goji
вернуть счастье от животных не из зоопарка, должно сделать ваш код намного проще. – billz
@billz: Я знал, но ему нужно так много вещей из основного (в реальном коде), так что в конечном итоге нужно будет передавать гораздо больше ценностей животному. Можете рассмотреть это снова, если ничего не работает. – msgmaxim