Какое-то время я думал, что можно было бы перегрузить немного необычный operator->()
для методов цепочки вместо .
, но это дало сбой, потому что кажется, что компилятору требуется идентификатор справа от ->
принадлежать к типу выражения static слева. Достаточно справедливо.
Метод бедняков
Возвращаясь на мгновение, смысл цепочки методов состоит в том, чтобы избежать многократного ввода длинных имен объектов. Я предложу следующий быстрый и грязный подход:
Вместо "длинной формы":
btn.move(Point(0,0)); btn.setText("Hey");
Вы можете написать:
{Button& _=btn; _.move(Point(0,0)); _.setText("Hey");}
Нет, это не так кратко, как реальное связывание с .
, но оно сохранит некоторую типизацию, когда нужно задать много параметров, и имеет то преимущество, что требует без изменения кода на ваши существующие классы. Поскольку вы ограничиваете всю группу вызовов методов в {}
, чтобы ограничить область действия ссылки, вы всегда можете использовать один и тот же короткий идентификатор (например, _
или x
) для обозначения конкретного имени объекта, потенциально повышая читабельность , Наконец, у компилятора не возникнет проблем при оптимизации _
.