Я пытаюсь написать универсальную служебную функцию для класса, которая применяет функцию к каждому элементу вектора, причем единственным входным аргументом является значение этого элемента.Идея заключается в том, что я могу использовать это для поддержки скалярного сложения / умножения, а также пользовательских функций без дублирования слишком большого количества кода.Он отлично работает для пользовательских функций, но я борюсь с тем, как лучше всего реализовать его для скалярного сложения / умножения.
Приведенный ниже код является упрощенной версией того, с чем я играюсь.Это работает нормально, но я хочу, чтобы «5» в лямбда-выражении представляло собой переменную, передаваемую отдельно, но не обязательно передаваемую в «apply_f».Так что продолжайте применять apply_f только с вектором и указателем на функцию.Мне известно о поле захвата для лямбда-выражений, но у меня возникли проблемы при передаче лямбда-функции с захватом в другую функцию.Я также знаю что-то вроде std :: bind, но не смог заставить это работать.
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
void apply_f(vector<double>& vec, double (*f)(double)) {
transform(vec.begin(), vec.end(), vec.begin(), f);
}
int main() {
vector<double> x {1, 2, 3};
auto f = [](double x){ return x + 5; };
apply_f(x, f);
cout << x[0] << endl;
cout << x[1] << endl;
cout << x[2] << endl;
}