Реализация template в .cpp-файле [дубликат]

142
18 мая 2019, 05:40

На данный вопрос уже ответили:

  • Вынести метод шаблонного класса в .cpp 3 ответа

Всех приветствую. Недавно начал свой путь познаний C++.

Честно говоря, темы такой мной не было найдено, по этой причине создаю новую.

К примеру, есть такой хэдер-класс:

People.h
class People{
  public:
   void SomeMethod();
   template<class T>
   T ReadPeopleInfo(T& data, T& yet_data);    
};

Как можно реализовать ReadPeopleInfo в cpp файле?

Пробовал так:

People.cpp
T People::ReadPeopleInfo(T& data, T& yet_data){

}

выдает ошибку

Ошибка E0795 для специализации шаблон функции "People::ReadPeopleInfo" требуется синтаксис "template<>"

Как быть?

P.S В дальнейшем нужно будет сделать single-pattern, по этому template нужно запихать в class

Answer 1

Да как и объявляли:

template<class T>
T People::ReadPeopleInfo(T& data, T& yet_data)
{
    ....
}

Только вот после этого у вас сразу будет вопрос - почему линковщик говорит, что не видит People::ReadPeopleInfo?

Определения шаблонных сущностей должны располагаться в заголовочных файлах. Скомпилировать отдельно, в отдельном файле так, чтоб ими можно было воспользоваться из другого файла - можно, но сложно и надо знать заранее, для каких именно типов.

Так что возвращайте определение назад в заголовочный файл.

READ ALSO
Не копируются char-ы

Не копируются char-ы

Суть вопроса: почему, если закоментировать dest = new char [lSrc];, то функция работает (с оговорками), а без коммента - dest никак не меняется?

130
Поиск событий в QTableWidget

Поиск событий в QTableWidget

У меня следующий вопрос по QtЯ создал журнал событий, вывод свойств этих событий

101
strcmp in devcpp

strcmp in devcpp

Почему в devcpp strcmp возвращает только 0, 1, -1 а не разницу символов в коде ascii в отличии от других компиляторов?

102
Максимум 2 чисел [закрыт]

Максимум 2 чисел [закрыт]

Как правильно написать шаблонную функцию для нахождения максимума двух чисел?

111