Активация функции члена шаблона
В Class.h
:
class Class {
public:
template <typename T> void function(T value);
};
В Class.cpp
:
template<typename T> void Class::function(T value) {
// do sth
}
В main.cpp
:
#include "Class.h"
int main(int argc, char ** argv) {
Class a;
a.function(1);
return 0;
}
Я получаю связанную ошибку, потому что Class.cpp
никогда не создаёт экземпляр void Class::function<int>(T)
.
Вы можете явно создать экземпляр класса шаблона с помощью:
template class std::vector<int>;
Как явным образом создаю экземпляр члена шаблона класса без шаблона?
Спасибо,
Ответы
Ответ 1
В Class.cpp
вы можете использовать следующий синтаксис:
template void Class::function(int);
Аргумент шаблона может быть опущен из-за вывода типа, который работает для шаблонов функций. Таким образом, приведенное выше эквивалентно следующему, более кратким:
template void Class::function<int>(int);
Обратите внимание, что нет необходимости указывать имена параметров функции - они не являются частью сигнатуры функции (или шаблона функции).
Ответ 2
Вы пробовали со следующим: Class.cpp
?
template void Class::function<int>(int value);