@Ander813

Можно ли в C++ как то передать методы наследника в класс родителя?

Есть родительский класс меню, в нем есть метод print_menu(), который выводит в консоль названия пунктов меню (например "ввести значения") из списка, который определяется в наследнике. При выборе пункта меню должна отработать функция класса наследника, которая за него отвечает.
В питоне это можно было сделать при помощи словаря.
class AMenu(ABC):
    def __init__(self):
        self.menu_fields = {}

    def print_menu(self):
        for i in self.menu_fields.keys():
            print(i)

class Menu(AMenu):
    def __init__(self):
        self.menu_fields = {"пункт меню 1": self.method1,
                            "пункт меню 2": self.method2}

    def method1(self):
        pass

    def method2(self):
        pass


m = Menu()
m.print_menu()

Пробовал решить эту задачу в си++ при помощи map, но как оказалось в си++ ты не сможешь записать метод класса в словарь так просто.
Вопрос собственно в том можно ли как-то в си++ класс родителя перекидывать <название пункта меню, функция за него отвечающая>?
  • Вопрос задан
  • 278 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Сходу можно придумать два варианта:
1. Виртуальные методы и наследование: у родителя объявляете виртуальные методы, в наследнике реализовываете. Это наиболее жесткий способ построить архитектуру, как результат, меньше шансов налажать при рефакторинге и разработке большой толпой.
2. Функторы - помягче и посвободнее, меньше связности, гибче архитктура

В зависимости от архитектуры, могут подойти разные трюки с шаблонами, но это надо хорошо знать задачу.

Общее правило - не тащить в свое мышление методы и подходы из других языков, даже если они вам нравятся. Это правило появилось сразу после того, как после Фортрана начали как грибы после дождя появляться альтернативы для академического программирования - Паскаль в частности.

Антипаттерн звучит как "Я на любом языке программирования пишу как на Фортране, вариация - "Пишу на С++ как на С", и так далее.

Языки программирования тем и отличатся, что кроме синтаксиса, тащат за собой еще и устоявшиеся подходы к организации архитектуры.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy
Android developer at Yandex
Гугли "С++ callback"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы