Вы можете определить шаблон функции в заголовке, чтобы избежать предупреждений компоновщика, что-то вроде этого, в myclass.h
class MyClass {
public :
template <class T>
T memberFunction(const T& arg) {
return arg*arg + arg + 0.2;
}
};
Обратите внимание на изменение в объявлении функции-члена шаблона.Вам не нужно разделять объявление и определение, а также явно определять специализацию для типов int и double, потому что поведение вашей функции одинаково для int и double.Помните о возможном взлете кода.Позже вы можете использовать функцию, как показано ниже
#include "myclass.h"
int main(int argc, char** argv) {
MyClass c1;
int res = c1.memberFunction(3);
printf("result=%d",res);
return 0;
}
, и позволить компилятору выводить тип аргументов и неявно производить надлежащую реализацию функции.Если вам действительно нужен ant int для возврата из функции, вы можете сделать несколько приведений к результату.
Если вам действительно нужно разделить объявление и определение функции-члена шаблона так, чтобы вам нужно было определить член-шаблон функции вФайл cpp и для подавления предупреждений компоновщика, это может быть поведение, зависящее от компилятора, если вы используете компилятор с ограниченным ключевым словом экспорта, вы можете использовать его или использовать ключевое слово extern, если это поддерживается компилятором.В этом случае идея состоит в том, чтобы явно создать экземпляр функции-шаблона в заголовке, чтобы этот компилятор имел надлежащую реализацию во время обработки определений в файле cpp, или, как вы сделали, чтобы добавить явное объявление для необходимых типов в файле cpp.