Явная специализация шаблона
Такой вопрос. Явная специализация для структуры box, выдаёт адрес, вместо значения. Где ошибка и почему она вместо значения выводит адрес?
#include <iostream>
using namespace std;
struct box
{
char maker [40];
float height;
float width;
float length;
float volume;
};
template<typename T>
T maxs(T a, T b)
{
return a > b ? a : b;
}
template <> box maxs(box b1, box b2)
{
return b1.volume > b2.volume? b1 : b2; }
template<typename T>
T maxs(T a, T b);
template <> box maxs(box b1, box b2);
int main(int argc, char *argv[])
{
box *sa = new struct box;
box *sb = new struct box;
sa->volume = 19.0;
sb->volume = 15.0;
cout << "Max volume: " << maxs(sa, sb) << endl;
delete sb;
delete sa;
return 0;
}
Ответы (1 шт):
Вы передаете указатели на box, никакая явная специализация не работает - работает сравнение указателей, результат - указатель, каковой и выводится...
Кстати, если бы вдруг сработало - как вы себе представляете вывод box в cout? У вас же специализация возвращает сам box, а оператора вывода для этого типа в программе нет...
Далее, для функций я бы выбирал не специализацию шаблона, а перегрузку - типа
const box& maxs(const box& a, const box& b) { ...
P.S. На будущее будьте внимательны, ставя метки. Вы, когда выбирали метку "шаблоны", должны были прочесть
Для пометки вопросов, имеющих отношение к templates C++, имеется метка
шаблоны C++! Шаблоны (Шаблоны проектирования, паттерны проектирования, Design Patterns, ) - представляют собой подход к проектированию чего-либо. Не являются готовым решением, а лишь представляют общее описание решения проблемы, которое можно использовать в различных ситуациях. В ООП широко используются 23 паттерна.
Где в вашем вопросе паттерны проектирования?...