Я шаблонизирую класс очереди, чтобы я мог использовать его с любыми значениями от целых чисел до любых структур, которые мне нужно определить.
Мне нужно передать функцию сравнения в конструктор класса, предопределенную функцию сравнения дляЗатем ints и тому подобное оставляют за клиентом возможность предоставлять любые функции сравнения, которые могут ему понадобиться.Но как мне это сделать?
template<typename Type>
int cmpFn(Type one, Type two)
{
if (one < two) return -1;
if (one > two) return 1;
return 0;
}
template <typename Type>
class Queue
{
public:
Queue()
{
Type *list = new Type[size];
// What do I do now?
// How to define this constructor?
// It must pass a comparison function
// to a private sort method in this class.
}
private:
void sortFunc(Type list, int(fn)(Type one, Type two)=cmpFn);
};
Возможно, в приведенном выше коде есть некоторые ошибки, так как я просто записал это из головы, чтобы прояснить свой вопрос.Но все, что меня интересует, - это как передать функцию сравнения в метод сортировки при определении класса.
Это личное упражнение, я не зачислен ни на один курс и не имею доступа к каким-либо преподавателям,Я уже некоторое время гуглю это, но не могу придумать правильный ответ ... Наверное, я не задавал правильный вопрос мистеру Гуглу.
PS Клиент можетЯ хочу предоставить функции сравнения для любых данных, например:
struct individual
{
string name;
int age;
double height;
};
Я предполагаю, что конструктор должен быть таким:
Queue(int (*fn)(Type, Type) = cmpFn);
Но как мне определить / реализовать это?Этот объект обратного вызова будет использовать не сам объект Queue, а его метод: sort ();