Оператор 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

 

Это распространяться не должно. Будет выдаваться ошибка.

-10
рейтинг
1 комментарий
Nikola_g

Мне кажется слишком запутано будет, если будет иерархия наследования или вложенность.

Nikola_g
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения