Рассмотрим следующий код, где у меня есть спецификация шаблона для ссылки на структуру.Кажется, что функция не распознает эту спецификацию и продолжает использовать исходное определение шаблона.
Если я избавлюсь от операторов &
в спецификации шаблона, я получу работающую программу.
#include <iostream>
template <typename T>
T larger(T a, T b);
struct point
{
double x;
double y;
};
template <> point& larger(point & p1, point & p2);
int main()
{
using namespace std;
point p1 = { 1.1, 2.2 };
point p2 = { 3.3, 4.4 };
point &q1 = p1; // this is already a reference to 'point'
point &q2 = p2;
point q3 = larger(q1, q2); // neither this
point q4 = larger(p1, p2); // nor this works
cin.get();
cin.get();
}
template <typename T>
T larger(T a, T b)
{
return a > b ? a : b;
}
template <> point& larger(point& p1, point& p2)
{
return p1.x*p1.y > p2.x * p2.y ? p1 : p2;
}