Оператор является нестатической функцией-членом, поэтому вы можете использовать
a.A::operator+( b )
Однако для другого класса, который определяет operator+
как статическую функцию-член, то, что вы пробовали, будет правильным.А третий класс может сделать ее бесплатной функцией (возможно, лучшим способом), поэтому B::operator+(a,b)
и a.operator+(b)
будут неверными, а operator+(a,b)
правильными.
Как правило, лучше всего использовать операторсинтаксис a+b
, если вы точно не знаете, что это за класс, и что его реализация никогда не изменится.В контексте шаблона написание a+b
является обязательным, и по существу невозможно получить адрес перегрузки (единственная задача, для которой требуется присвоение ему имени) без большой работы.
В вашем контексте (в комментарии к другому ответу упоминаются шаблоны), лучшим решением будет
c = static_cast< A const & >( a ) + static_cast< A const & >( b );
… проблема решается путем разрезания типов в соответствии с подзадачей, а не с точным наименованием нужной функции.