Страницы

Поиск по вопросам

пятница, 11 января 2019 г.

Перегрузка оператора “+” в шаблоне

Здравствуйте. Столкнулся с проблемой: не могу правильно перегрузить оператор сложения в шаблоне класса. Может кто показать мне мою ошибку? Тип данных массива в шаблоне может быть char,int, float, double. Должно поддерживаться сложение разных типов данных (т.е. если первый объект с параметром int, а второй - с параметром double, то метод должен возвращать объект с параметром double).
#pragma once template class Vector { T *data; size_t size; public: Vector(); Vector(size_t size); ~Vector(); size_t getSize(); void SetAll(); void ClearAll(); void SetVectorSize(size_t); T operator [](int); template< typename U > Vector & operator+(Vector &B); };
cpp файл:
#include "stdafx.h" #include "Vector.h" #include #include ... ... template template inline Vector & Vector::operator+(Vector& B) { if (sizeof(this->data[0]) > sizeof(B.data[0])) { Vector obj; } else { Vector obj; } obj.data[0] = 1; return obj; }


Ответ

Если я верно понял, что вы хотите, то решение примерно такое -
template Vector> operator+(const Vector&) const { Vector> x; // складываете, как вам надо ....... return x; }
Код
Vector a; Vector b; auto c = a+b; cout << typeid(c).name() << endl;
даст Vector
И еще - вы должны объявить этот оператор как возвращающий вектор нового типа, а не ссылку - иначе вы по сути вынуждены возвращать ссылку на свой объект, а его тип предопределен.
Update В принципе, можно как-то так - но, как мне кажется, это будет совсем не так красиво:
template auto operator+(const Vector&A) const { Vector x; return x; }
Т.е. даем компилятору самому решить, какой тип имеет сумма, и этот тип используем для типа возвращаемого значения.

Комментариев нет:

Отправить комментарий