Обновить
3
Владислав Власов@AirMyxa

Sigsegv developer

3
Подписчики
Отправить сообщение

Вы правы, вот вариант на C++


    struct ParserJsonImpl {
        int getData() {
            std::cout << "ParserJsonImpl::getData()\n";
            return 0;
        }

        int getID() {
            std::cout << "ParserJsonImpl::getID()\n";
            return 0;
        }
    };

    struct ParserXmlImpl {
        int getData() {
            std::cout << "ParserXmlImpl::getData()\n";
            return 0;
        }

        int getID() {
            std::cout << "ParserXmlImpl::getID()\n";
            return 0;
        }
    };

    using parser_t = std::variant<ParserJsonImpl, ParserXmlImpl>;

    std::pair<int, int> parseFile(parser_t parser) {
        auto visitor = [](auto parserImpl) {
            return std::make_pair(parserImpl.getData(), parserImpl.getID());
        };
        return std::visit(visitor, parser);
    }

Можно принимать тип-сумму в функции. В случае C++ std::variant<ParserJsonImpl, ParserXmlImpl>

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность