Подтвердить что ты не робот

Активация функции члена шаблона

В 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>;

Как явным образом создаю экземпляр члена шаблона класса без шаблона?

Спасибо,

4b9b3361

Ответ 1

В Class.cpp вы можете использовать следующий синтаксис:

template void Class::function(int);

Аргумент шаблона может быть опущен из-за вывода типа, который работает для шаблонов функций. Таким образом, приведенное выше эквивалентно следующему, более кратким:

template void Class::function<int>(int);

Обратите внимание, что нет необходимости указывать имена параметров функции - они не являются частью сигнатуры функции (или шаблона функции).

Ответ 2

Вы пробовали со следующим: Class.cpp?

template void Class::function<int>(int value);