There are other questions regarding how to pass an external function as an argument to a function in C++, but I am struggling to apply those answers to the case where the target function is the constructor function for a novel class.
Here is what I am trying to do:
#include <iostream>
double external_function(double x, double y) {
    return x * y;
}
class foo {
public:
    // Initialize a function (?) as a method of class foo
    double func(double, double);
    // Construct an instance of the class by supplying a pointer to an external function
    foo(double(*func_in)(double, double)) {
        func = *func_in;
    }
    // When calling this method, evaluate the external function
    double eval(double x, double y) {
        return func(x, y);
    }
};
int main() {
    foo foo_instance(&external_function);
    std::cout << foo_instance.eval(1.5, 2); // Should print 3
    return 0;
}
I would like to have func as a method of the foo class because I later will write methods of foo that do other things with func, e.g. search for a local minimum.
By analogy, here is working code that passes an external constant instead of a function:
#include <iostream>
double external_value = 1.234;
class bar {
public:
    // Initialize a value as a method of class bar
    double val;
    // Construct an instance of the class by supplying a pointer to an external value
    bar(double* val_in) {
        val = *val_in;
    }
    // When calling this method, return the external function
    double eval() {
        return val;
    }
};
int main() {
    bar bar_instance(&external_value);
    std::cout << bar_instance.eval(); // 1.234
    return 0;
}
 
     
    