Звучит так, как будто вы хотите «создать функцию, которая может умножать массивы», которая будет использоваться «для множества разных измерений».
Я бы справился с этим так же, как я бы имел дело с vector
оператор вывода: использовать шаблоны с рекурсией!
Если бы я хотел сделать функцию для суммирования всех чисел в двух vector
при их добавлении, я мог бы сделать:
template <typename T>
int operator+(std::vector<T> v1, std::vector<T> v2) {
if(v1.size() != v2.size()) { throw; } //for simplicity
int sum = 0;
for(size_t x = 0; x < v1.size(); x++) {
sum += v1.at(x) + v2.at(x);
}
return sum;
}
Обратите внимание, что магия здесь находится в строке
sum += v1.at(x) + v2.at(x);
Если v1.at(x)
и v2.at(x)
равны std::vector
, мы просто будем рекурсивно вызывать этофункционировать снова.Но если они int
, мы добавим их в sum
и продолжим.
Вы можете увидеть это в действии здесь: ideone
Вы можете сделать что-то подобное для умножения массива.Разбейте проблему на более мелкие части, чтобы вы могли использовать рекурсию и позволить шаблонам обрабатывать все остальное!