Как упомянуто в комментарии @ paler123, вы можете использовать std::transform
для выполнения работы + небольшую шаблонную функцию.
Поскольку ваши две функции имеют сходство в сигнатуре функции
i.e, Type function(Type arg)
Я выбрал типизированные указатели функций в качестве параметров функции шаблона.
template<typename Type>
std::vector<Type> func(const std::vector<Type>& a_vec, Type(*func)(Type))
{
std::vector<Type> out_vec; out_vec.reserve(a_vec.size());
std::transform(a_vec.begin(), a_vec.end(), std::back_inserter(out_vec), func);
return out_vec;
}
Теперь в main()
вы можете либо явно указать тип, либо оставить его как есть и позволить компилятору делать вывод типа.
auto result = func<int>({ 1,2,3,4 }, func1);
// also can
auto result2 = func({ 1, 2, 3, 4 }, func2);
См. пример выходных данных здесь