Заранее извините за мой плохой английский. Я занимаюсь разработкой собственного STL, и у меня возникли некоторые проблемы с использованием шаблона.
Это основная структура класса my List:
List.h
template <class T, class N>
class List{
public:
//public methods
private:
//private methods
}
Хорошо, теперь мне нужно реализовать функцию-член «sort», которая будет сортировать элементы списка, но в этой функции сортировки мне нужно istantiate объект List.
Я нашел решение, реализующее эту функцию в другом модуле следующим образом:
AuxiliaryFunction.h
#include<List.h>
template <class List>
void sort(Lista & l){
List A; //Works fine!
..
}
Но таким образом я должен вызвать функцию сортировки, выполнив это:
sort(ListObject);
вместо
ListObject.sort();
Как я могу сделать то же самое, но с функцией-членом класса List?
Что было бы иначе, если бы класс List был абстрактным классом, подобным следующему коду?
template <class T, class N>
class List{
public:
typedef T ElemType;
typedef P position;
virtual void create() = 0;
virtual bool empty() = 0;
..
void merge(Lista< T, N > &, Lista< T, N > &);
...
private:
//private methods
}
Может ли параметр шаблона шаблона быть решением? Я пытался сделать что-то вроде этого
template <class T, class N>
class List{
...
template <template <class T,class N> class List> sort(){
List A;
..
}
}
но ошибка C2783 («не удалось вывести аргумент шаблона для List») появляется, когда я пишу
ListObject.sort ();
Любая помощь будет оценена 🙂
Похоже, вы ищете что-то вроде этого:
template <class T, class N>
class List{
...
void sort(){
List<T, N> A;
..
}
}
Других решений пока нет …