Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Определить возвращаемый тип перегруженной функции в шаблоне

#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



template auto // возвращаемый тип выводится из return result fooMas(::std::vector const & mas) { ::std::vector result{}; // выводим из результата функции for(auto const & i : mas) { result.emplace_back(foo(i)); } return result; }

Комментариев нет:

Отправить комментарий