Я использую функцию at () и заставляю оператора [] вызывать функцию at () за кулисами, поэтому оператор [] - это просто синтаксический сахар. Вот как это делает std :: vector, поэтому это кажется разумным (с приоритетом) способом сделать это.
Теперь для полного синтаксического взлома сахара (не могу сказать, что я полностью рекомендую это, но могло бы поразить ваше воображение):
class Widget
{
Widget& self;
public:
Widget() :self(*this)
{}
void operator[](int)
{
printf("hello");
}
void test()
{
//scripting like sugar
//you pay the price of an extra reference per class though
self[1];
}
};
int main(int argc, char* argv[])
{
Widget w;
w[1];
w.test();
return 0;
}
Также, если вы хотите сделать это бесплатно, не оплачивая стоимость ссылки, И являются последователями какой-то злой секты, посвященной тому, что программисты могут пострадать, которую вы могли бы сделать:
#define self (*this)
На самом деле, я думаю, именно так большинство дескрипторов реализовано в NS API Apple ...