Как лучше перегружать оператор +: через friend функцию внутри класса или как inline функцию вне класса?
Класс шаблонный.
Не совсем понятно такое ограничение количества вариантов. Friend-функцию можно определять и внутри, и снаружи класса. Определение снаружи класса может быть как inline, таки и не inline. Почему вдруг речь идет только о "friend функции внутри класса"? Почему при определении вне класса речь идет именно об inline?
Тем не менее:
Во-первых, без разницы. Во-вторых, зависит от того, нужен ли вам friend-доступ. Нужен или нет?
Обычно предпочитают friend-вариант даже тогда, когда friend-доступ не нужен, просто потому, что он позволяет поместить все определение перегружаемой функции внутрь класса. Кто-то считает, что в таком виде код выглядит удобочитаемее. Это так, для небольших функций.
Большие функции, по моему мнению, лучше определять вне класса. И здесь вопрос о том, будет ли функция inline и будет ли функция friend определяется посторонними факторами, специфичными для каждой функции, которые вы в своем вопросе не упомянули.
К "шаблонности" класса все это не имеет никакого отношения. С тем только замечанием, что в таком случае есть одна тонкость: объявить нешаблонную перегрузку в таком случае можно только как friend прямо в определении шаблона класса. (см. здесь)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я спрашивал подобный вопрос здесь
Как перегрузить оператор + так, чтобы можно было складывать мой класс с другим типом в обе стороны?
Нужно вывести результат деления двух чисел с точностью до 10^-9