#cpp #шаблоны_с++
У меня возникает проблема с определением типа возвращаемого значения перегруженной функции внутри шаблона. Возвращаемый тип зависит от параметра, который передается в шаблон. Сразу приведу минимальный рабочий пример: #include// У меня есть несколько типов struct a { a() {} }; struct b { b() {} }; struct c { c() {} }; // И одна функция, перегруженная с разными входными и выходными параметрами a foo(b) { return a(); } b foo(c) { return b(); } c foo(a) { return c(); } // Проблема: как определить C автоматически? template std::vector fooMas(const std::vector & mas) { std::vector result; for (auto i : mas) result.push_back(foo(i)); return result; } int main() { std::vector amas(5, a()); std::vector cmas = fooMas(amas); //std::vector cmas = fooMas(amas); // Здесь возникает ошибка } Вручную такое писать бы не хотелось, потому что у меня много типов, и много перегруженных функций, и все их надо перевести на такое обращение с массивом. Хотелось бы это автоматизировать с помощью вышеописанного шаблона, но не представляю как. Помогите пожалуйста.
Ответы
Ответ 1
templateauto // возвращаемый тип выводится из return result fooMas(::std::vector const & mas) { ::std::vector result{}; // выводим из результата функции for(auto const & i : mas) { result.emplace_back(foo(i)); } return result; }
Комментариев нет:
Отправить комментарий