Adding polymorphy by wrapping lambdas into std::function
Let's say we want to write an observer function for some kind of value, which might change sometimes, which then notifies other objects; like a gas pressure indicator, or a stock price, or something similar. Whenever the value changes, a list of observer objects should be called, which then react their way.
In order to implement this, we could store a range of observer function objects in a vector, which all accept an int
variable as the parameter, which represents the observed value. We do not know what these function objects do in particular when they are called with the new value, but we also don't care.
Of what type will that vector of function objects be? The std::vector<void (*)(int)>
type would be correct if we were capturing pointers to functions with signatures such as void f(int);
. This would indeed also work with any lambda expression that does not capture any variables, such as [](int x) {...}
. But a lambda expression...