I have a third party class Calculation
with a function setCallback
:
typedef void (*callback_function)(void);
class Calculation
{
public:
void setCallback(callback_function pFunc);
};
and my function I want to use as callback
void callback(int id);
I want to create, say, four (number known at compile time) objects of Calculation
and set the callback for each object. I could do something like
void callback0() { callback(0); }
void callback1() { callback(1); }
void callback2() { callback(2); }
void callback3() { callback(3); }
int main() {
std::vector<Calculation> vec;
for (int i = 0; i < 4; i++) {
Calculation c = Calculation();
vec.push_back(c);
}
vec[0].setCallback(callback0);
vec[1].setCallback(callback1);
vec[2].setCallback(callback2);
vec[3].setCallback(callback3);
return 0;
}
Question: How can I achieve this without duplicating and repeating code?
I was thinking of lamdas, like
for (int i = 0; i < 4; i++) {
Calculation c = Calculation();
c.setCallback([i]() -> void {callback(i);});
vec.push_back(c);
}
but a lambda can only be converted to a function pointer if it does not capture.