Использование вывода этого и затенения для точек настройки: действителен ли этот подход?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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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