Существует также более старая, менее специфичная для c ++ 11 и, как правило, более общая версия ответа.(Если вас интересует только конкретный случай, вам не нужно читать дальше).
Общий случай свободных функций описан в этой классической статье DrDobb абсолютным гуру C ++.
Короткая и приятная версия: если вы разделяете открытый интерфейс сдоступ к закрытым членам и общедоступному интерфейсу с доступом только к общедоступному интерфейсу. У вас более сложное разделение между классом и операциями над этим классом.
Это выглядит несколько уродливо, снижает полезность большинства IDE, но имеет некоторые глубокие последствияна модульность вашего кода, особенно когда вы принимаете шаблонное безумие последних std
итераций.Ответ Матиаса изображает один яркий пример этого.
Более классическим преимуществом является то, что вы можете предоставить набор бесплатных функций внутри дополнительного заголовка, который пользователь может включить по требованию.Теперь подумайте о взаимодействии между шаблонными, но в остальном совершенно отдельными классами A
и B
.Теперь вы можете связать их вместе, предоставив заголовок наподобие A_B_interop.h
, полный бесплатных функций, без переключения парадигм.Если вы включите этот заголовок, классы станут более мощными.