Если вы ссылаетесь на глобальных операторов, вы уже получили некоторые ответы. Однако в некоторых особых случаях может быть полезно использовать перегруженные операторные функции.
Это может быть тривиально; тем не менее, в некоторых случаях это может быть полезно, поэтому я публикую один пример:
#include <iostream>
template<typename opType, typename T>
int operation(opType op, T a, T b)
{
return (a.*op)(1) + (b.*op)(1);
}
struct linear
{
int operator()(int n) const {return n;}
int operator[](int n) const {return n * 10;}
};
int main()
{
linear a, b;
std::cout << operation(&linear::operator(), a, b) << std::endl
<< operation(&linear::operator[], a, b);
return 0;
}
выход:
2
20