Я довольно новичок в c ++ и пытаюсь создать класс Array в c ++ 17 с использованием шаблонов.В этом классе я перегружаю оператор + таким образом, что он может добавлять массивы нескольких типов.Пока это работает, и я могу добавлять массивы различных типов, например, float и int.Тем не менее, у меня возникли некоторые проблемы с тем, как определить тип нового массива, который является результатом добавления.
Допустим, добавленные мной массивы имеют тип float и int.Тогда новый массив также должен быть плавающим.Однако я не знаю, какой массив имеет тип float, первый или второй, поэтому я не могу создать новый массив с типом T или U.
Кроме того, если из-за совпадения двамассивы с плавающей точкой складываются вместе только в значения int (например, 1,5 + 3,5 = 5 (int)), тогда новый массив должен иметь тип int.
В целом, я пытаюсь определить тип новогомассив в зависимости от типа содержимого после добавления.
Я столкнулся с некоторыми решениями, которые включают decltype.Однако я не могу найти способ, как включить это для нескольких значений, так как массив имеет более одного значения.В моем текущем коде я создаю новый массив на основе типа T. Однако, если в случае T имеет тип int, а U типа float, результат не является правильным.
Любые советы или советы оченьоценили.Заранее спасибо,
template <typename T>
class Array {
public:
T* content;
int length;
// Default Constructor
Array() : content(nullptr), length(0) {}
// Constructor when length is provided
Array(int length) : content(new T[length]), length(length) {}
// Constructor (using initializer list)
Array(std::initializer_list<T> list) : Array((int)list.size()) {
std::uninitialized_copy(list.begin(), list.end(), content);
}
// Obtain content at index i
float& operator[](int i) { return content[i]; }
// Adding arrays
template <typename U>
Array& operator+(Array<U>& other) {
Array<T>* new_array = new Array(other.length);
for (auto i = 0; i < other.length; i++)
new_array->content[i] = this->content[i] + other.content[i];
return *new_array;
}
};