специализация шаблона вызывает неопределенную ошибку ссылки - PullRequest
0 голосов
/ 07 сентября 2018

Я попробовал шаблонную специализацию как ниже.

#include<iostream>
using namespace std;

template<class T1, class T2>
T1 something(T2 a);

template<class T2>
double something(T2 a){
    double b;
    return b;
}

int main(){
    something<double, double>(0.0);
}

Однако, это дает мне ошибку компиляции:

In function `main':
test.cpp:(.text+0x9): undefined reference to `double something<double, double>(double)'

Не могли бы вы сказать мне, как это исправить?

1 Ответ

0 голосов
/ 07 сентября 2018

Это не специализация шаблона, а перегрузка шаблона функции .

Первая перегрузка имеет два параметра шаблона, вторая - только один; когда вы вызываете его с двумя указанными аргументами шаблона, такими как something<double, double>(0.0);, первый будет выбран в разрешении перегрузки; но это не определено, тогда приводит к ошибке связи.


Кстати: шаблоны функций могут быть только полностью специализированными , они не могут быть частично специализированными . И в большинстве случаев перегрузка шаблона функции будет хорошо работать.

...