Шаблонные классы и функции в C ++ - PullRequest
0 голосов
/ 03 апреля 2020

У меня вопрос, который меня смущает. Я знаю, что такое шаблон и цель его, но у меня есть некоторые пустые точки на использование.

У меня есть такой шаблон класса:

template <class elemType>
class SSorting {
public:

int seqSearch(const elemType list[], int length, const elemType& item);
};

Когда я кодирую член функции класса seqSearch Мне нужно объявить как:

template <class elemType>
int SSorting <elemType> :: seqSearch(const elemType list[], int length, const elemType& item){
    *statements*
}

На данный момент все в порядке. template говорит, что это функция, которая внутри класса шаблона и int перед функцией означает, что функция будет возвращать целочисленное значение, но часть, которую я не понимаю, это то, почему мы должны писать SSorting <elemType> :: seqSearch вместо SSorting :: seqSearch. Я уже говорю, что это член класса шаблона и возвращает тип, почему мне нужно сказать <elemType> снова.

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Следует помнить, что шаблоны классов / функций означают, что для каждого экземпляра с другим типом шаблона компилятор записывает еще одну копию кода, заменяя elemType на соответствующий тип. Это означает, что если вы используете в своем коде как SSorting<double>, так и SSorting<int>, вы получите два совершенно разных типа с разными именами.

Таким образом, имя класса не SSorting, но SSorting<elemType>!

0 голосов
/ 03 апреля 2020

Шаблонный класс не является "реальным" классом, это код шаблона. Это не существует, пока вы не используете его. Когда вы не пишете часть "elemType" в части определения, вы просто определяете функцию-член "реального" класса.

...