Оператор redirect вместо перегрузки точки
В некоторых ситуациях для удобства нужно перегрузить точку, но это выглядело бы очень странно и не понятно как работало.
Предлагаю добавить новый оператор redirect, который будет переадресовывать поле на другой объект, если компилятор его не нашел в действующем. Пример:
#include <iostream>
struct Vector
{
float X = 0.f;
};
template<class T>
struct Property
{
T Get() const { { }; }
redirect Get;
};
int main()
{
Property<Vector> property;
std::cout << property.X << std::endl; // поле X не было найдено внутри Property<Vector>, поэтому компилятор начинает его искать в Vector, если находит неявно преображает обращение в property.Get().X
}
На получение указателя поля:
&Property<Vector>::X
Это распространяться не должно. Будет выдаваться ошибка.
Мне кажется слишком запутано будет, если будет иерархия наследования или вложенность.