История изменений
Исправление hateyoufeel, (текущая версия) :
Есть условно говоря, класс AstNode и его наследники, всякие там AdditionExpressionNode и прочая. И есть классы типа Evaluator, Printer и все такое.
Тоже требуется двойная диспетчеризация. Не пойму как тут в принципе лямбды помогут и каким боком.
Такие вещи в современных плюсах можно делать на базеstd::variantиstd::visitбез классов и наследования. Но с лямбдами, если используется трюк с overloaded:
std::visit(overloaded{ [](auto arg) { std::cout << arg << ' '; }, [](double arg) { std::cout << std::fixed << arg << ' '; }, [](const std::string& arg) { std::cout << std::quoted(arg) << ' '; } }, v);
Пока так, пока паттерн-матчинг еще не завезли.
Да, я тоже хотел подобную тему притащить. Она, правда, с наследованием не работает. Но для описанного случая наследование не нужно, потому что общий интерфейс можно опять же задать через концепты.
Исходная версия hateyoufeel, :
Есть условно говоря, класс AstNode и его наследники, всякие там AdditionExpressionNode и прочая. И есть классы типа Evaluator, Printer и все такое.
Тоже требуется двойная диспетчеризация. Не пойму как тут в принципе лямбды помогут и каким боком.
Такие вещи в современных плюсах можно делать на базеstd::variantиstd::visitбез классов и наследования. Но с лямбдами, если используется трюк с overloaded:
std::visit(overloaded{ [](auto arg) { std::cout << arg << ' '; }, [](double arg) { std::cout << std::fixed << arg << ' '; }, [](const std::string& arg) { std::cout << std::quoted(arg) << ' '; } }, v);
Пока так, пока паттерн-матчинг еще не завезли.
Да, я тоже хотел подобную тему притащить. Она, правда, с наследованием не работает.