Почему не получается создать явную специализацию шаблона функции?
#include <iostream>
#include <conio.h>
using namespace std;
template <class T>
T Max(T a, T b) {
return a > b ? a : b;
}
struct box {
double height;
double width;
double length;
double volume;
};
void setVolume(box &b) {
b.volume = b.height * b.width * b.length;
}
template <> double Max<box>(box b1, box b2) { //Ошибка
return b1.volume > b2.volume ? b1.volume : b2.volume;
}
int main() {
box b1 = { 5, 4, 2 };
box b2 = { 10, 10, 2 };
setVolume(b1);
setVolume(b2);
cout << Max(b1, b2) << endl;
_getch();
return 0;
}
Ошибка C2912 явная специализация; "double Max(box,box)" не является специализацией функции
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
В шаблоне ясно сказано: принимает два T, возвращает T. У вас - принимает два box, но возвращает-то не box, а double...
Это - не специализация вашего шаблона.
Вы можете сделать так:
template<>
box Max<box>(box b1, box b2) {
return b1.volume > b2.volume ? b1 : b2;
}
Или так:
template <class T>
auto Max(T a, T b) {
return a > b ? a : b;
};
template<>
auto Max<box>(box b1, box b2) {
return b1.volume > b2.volume ? b1.volume : b2.volume;
}