lxstvayne
@lxstvayne
Люблю Python

Как правильно исправить шаблон функции С++?

Я хочу написать функцию map, которая будет принимать функцию, принимающую 1 аргумент и возвращающую результат, и контейнер, на который будет вызываться функция. Я смог написать рабочий вариант, однако, когда если функция несколько раз перегружена, то уже не работает. Помогите решить данную задачу, пожалуйста.
template< typename TItem, typename TAllocator, template< typename, typename > class TStorage, class T>
    auto map(T& func, TStorage<TItem, TAllocator>& storage)
    {
        auto f = [&](TItem item) { return func(item); };
        using t = decltype(f(std::declval<TItem>()));
        int _size = storage.size();

        TStorage<t, std::allocator<t>> new_storage;
        new_storage.resize(_size);

        for (int i = 0; i < _size; ++i) {
            new_storage[i] = f(storage[i]);
        }

        return new_storage;
    }
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 1
@FoxOne
У вас какая-то std::transform на стрероидах прям. Может попроще было бы её использовать?
И мне кажется у Вас проблема именно в вызове функции, там где выбирается перегрузка (которую, возможно, надо выбрать явно руками)
Ещё встречный вопрос: нахрена auto f ? да ещё с захватом всего и вся по ссылке
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы