У меня есть две структуры, в которых я пытаюсь переписать метод в базовой структуре.
Базовая структура определяется как:
template <class T>
struct compareFunction : public std::binary_function<T,T,bool> {
virtual bool operator() (const T & first, const T & second) {
//This function is always called
return first < second;
}
};
Структура, которую япопытка создать подкласс с определяется как:
template <class Key, class T>
struct valuecomparer : public compareFunction<std::pair<Key,T> > {
std::binary_function<Key, Key,bool> comparer;
bool operator() (const std::pair<Key, T>& x, const std::pair<Key, T> & y) {
//This function is never called
Key tx = x.first;
Key ty = y.first;
if(tx < ty) {
return true;
} else {
return false;
}
}
};
Я не вижу, что я делаю здесь неправильно, любая помощь будет принята с благодарностью.В идеале, метод в valuecomparer должен вызываться вместо метода в compareFunction.
Он вызывается в основном так (необязательно допустимый синтаксис, но пытается понять идею):
typedef compareFunction<T> cmpType; //Inside a class definition, T is std::pair<int,double>
valuecomparer<int,double> compareVar;
compareVar.comparer = std:less<int>();
cmpType x = compareVar;
x.compare(std::pair<int,double>(8,20.0),std::pair<int,double>(8,25.0));
Очевидно, что после переключения хранилища с чистой структуры на указатель структуры в классе, который использует базовую структуру (и, следовательно, производную структуру), все работает.Спасибо за помощь:)