У меня есть определенная функция, которая должна принимать в качестве параметра коллекцию объектов, создающих экземпляр определенного шаблона в настоящее время, я реализую его как A
template <typename Parser, typename ParserOutput>
bool run_parsers(const vector<Parser>& parsers, shared_ptr<vector<ParserOutput> >);
, затем B
using SemanticParsers = variant<a list of my parsers>
затем где-то я создаю экземпляр C
vector<SemanticParsers> pars_vect;
factory creating and loading parsers, adding them to pars_vect
run_parsers(pars_vect, ptr_parser_outputs)
всякий раз, когда я хочу добавить новый анализатор в список, я делаю это классом, который реализует функциональность, ожидаемую A edit B, добавляя новый класс в реестр B редактирования C, которыйзнает, как создавать и загружать классы
как я могу это сделать, не касаясь B По сути, я хочу, чтобы функция run_parsers принимала коллекцию классов, которые реализуют определенный интерфейс, но которые не являются классами одного и того же шаблона