Я пробую что-то вроде этого:
Foo & operator=(Foo & to, const Bar &from);
Но я получаю эту ошибку:
E2239 'operator =(Foo &, const Bar &)' must be a member function
Есть ли ограничения на который операторы, can/cannot быть определенными как Бесплатные Функции, и если так, почему?
Оператор присваивания должен быть нестатической функцией-членом и иметь ровно один параметр:
Оператор присваивания должен быть реализован с помощью нестатическая функция-член с одним параметром (C ++ 03 13.5.3 / 1).
operator ()
, operator []
и operator ->
также должны быть реализованы как нестатические функции-члены.
Зависящий от класса оператор new
и оператор delete
(и его варианты) должны быть реализованы как статические функции-члены (обратите внимание, что они неявно статичны, даже если они не объявлены с ключевое слово static
).
Не может.
Причина, я думаю, связана с конструктором копирования. У них очень похожая семантика, и вы не можете определить конструктор копирования вне класса, как другой конструктор. Итак, они не хотели разлучать близнецов далеко друг от друга (чтобы избежать парадокса близнецов :).
П.С. Что позор в C ++, так это то, что вы не можете добавить члена в существующий класс. Для этого нет низкоуровневой причины. Если бы это было возможно, вы могли бы разделить зависимости заголовка и cpp, не объявляя закрытые функции в заголовке определения класса.