Я хочу написать функцию 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;
}