Один из способов сделать это:
std::vector<std::function<Fractal(Fractal, Fractal)>> ops = {
[](Fractal l, Fractal r){ return l + r; },
[](Fractal l, Fractal r){ return l - r; },
[](Fractal l, Fractal r){ return l * r; },
[](Fractal l, Fractal r){ return l / r; },
};
Это имеет то преимущество, что не имеет значения, реализованы ли операторы как функции-члены или как свободные функции.
Под обложками лямбда хранится в function
объектах с правильной подписью вызова, а те хранятся в vector
.