Допустим у меня есть такой класс (все лишнее убрал для наглядности):
class Window{
public:
Graphics *g;
}
Например я где-то создаю
Window myWindow();
Для того, чтобы вызвать функцию объекта g мне нудно написать
myWindow.g->
и только потом писать нужную функцию.
Это плохо как минимум тем, что мой
g можно спокойно изменить снаружи класса. Но и сделать его закрытым не очень хорошая идея, потому что тогда придется писать некую прослойку для вызова каждой функции, а их под сотню, да еще и все с перегрузками. И я подумал: а нельзя ли как-то хитро переопределить
operator() так, чтобы вот эти строки были эквивалентны:
myWindow.g->Clear(Color::White);
myWindow(Clear(Color::White));
То есть грубо говоря пробросить методы объекта
g в свой класс. Это вообще реально? Ну или хотя бы что-то похожее, чтоб код был более защищенным и компактным.