В проекте, над которым я работаю, есть несколько довольно неприятных коллекционных классов, которые, я думаю, могли бы использовать редизайн.Мне бы очень хотелось создать класс шаблона коллекции, который бы брал экземпляры модели и предоставлял способ вызывать специфичные для типа функции каждого дочернего элемента в коллекции.Например, что-то вроде:
MyCollection<Student> BiologyStudents();
// [Fill the collection]
BiologyStudents.EnrollInClass(ClassList::Biology);
BiologyStudents.Commit();
Идея состоит в том, что я могу легко записать всех учащихся в класс, используя свою коллекцию, и затем зафиксировать эти изменения в базе данных.Моя проблема в том, как выставить ту функцию EnrollInClass()
, которая принадлежит дочерним объектам Student?Если моя коллекция содержит объекты другого типа, чем Student, я бы хотел, чтобы эти функции были доступны из коллекции.Единственный способ, которым я могу подумать сделать это с моими полуограниченными знаниями C ++, - это создать функцию, которая принимает параметр, который ссылается на функцию, которую я знаю, в содержащем дочернем классе.Это не приведет к ошибкам компиляции, если вы вызовете неправильную функцию или предоставите неправильные параметры, поэтому я хотел бы использовать компилятор для этих проверок.
Возможно ли это?Если так, то как?В качестве предупреждения я привык к общему программированию на Java / C #, поэтому моё представление о шаблонах C ++ может быть немного неправильным.