соединение перегрузки » =»оператор как свободная функция

#c #operator-overloading

#c #оператор-перегрузка

Вопрос:

Как перегрузить = для типа std::array, чтобы я мог выполнить следующее

 std::array<int, 3> x = {1,2,3}; 
std::array<int, 3> y = {4,5,6};
x  = y;
  

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

1. Вы пробовали std::array<int, 3>amp; operator =(std::array<int, 3>amp; lhs, const std::array<int, 3>amp; rhs) { ... } ?

2. std::valarray может быть лучшим выбором, чем std::array здесь.

Ответ №1:

Если вы хотите перегрузить оператор для существующего типа, не изменяя этот тип, вы можете выбрать перегрузку, не являющуюся членом.

Здесь вы можете попробовать шаблонный подход, чтобы охватить все возможные массивы, если элементы могут быть добавлены:

 template <class T, size_t n>
std::array<T,n>amp; operator = (std::array< T, n>amp; l, const std::array<T, n> amp;r) {
    for (size_t i=0; i<n; i  )
        l[i]  = r[i];
    return l; 
}
  

Онлайн-демонстрация