Использование вывода этого и затенения для точек настройки: действителен ли этот подход?C++

Программы на C++. Форум разработчиков
Anonymous
Использование вывода этого и затенения для точек настройки: действителен ли этот подход?

Сообщение Anonymous »

Я изучаю дизайн для предоставления функций членов по умолчанию в базовом классе, позволяя производным классам настраивать их с помощью затенения. Цель состоит в том, чтобы получить полученные классы, чтобы необязательно переопределить функцию, такую ​​как foo () , при этом возвращается к базовой реализации, если ни одна из них не предоставлена.
Вот минимальный пример того, что я M Попытка достичь: < /p>

Код: Выделить всё

struct base
{
auto foo(this auto&& self)
{
/* default implementation of foo */
}
};

struct derivedA : public base
{
auto foo(this auto&& self)
{
/* custom implementation of foo */
}
};

struct derivedB : public base
{
};

int main()
{
derivedA a;
a.foo(); // calls derivedA::foo
derivedB b;
b.foo(); // calls base::foo
}
Теперь вызов a.foo () будет использовать настраиваемую реализацию в Deriveda. и b.foo () отрывы в реализации по умолчанию в базовом классе.
Это кажется почти таким же просто Принято. < /p>
Мои вопросы: < /p>
  • Работает ли этот подход? < /li>
    Каковы плюсы и минусы этого подхода?
    Когда полученный класс скрывает функцию элемента базового класса, все перегрузки этой функции -члена становятся недоступными, включая константные перегрузки или что -то в этом роде. Но могу ли я использовать, если contexpr и вывести это, чтобы объединить все перегрузки в одну функцию?
  • Задержка отстой. Работа с существующими типами или встроенными типами, поскольку они должны явно наследовать от базы.


Подробнее здесь: https://stackoverflow.com/questions/794 ... proach-val

Вернуться в «C++»