Этот вопрос может быть наивным, если так, пожалуйста, прости меня, когда я учусь.
Пожалуйста, рассмотрите следующий C ++ - как псевдокод :
#include <iostream>
#include <string>
#include <functional>
struct A{
bool doSomething(int in){
std::cout<<"SOMETHING WAS DONE THAT DAY: "<<in<<std::endl;
return true;
}
};
struct B{
std::function executor;
void setExecutor(std::function f){
executor=f;
}
bool doSomethingLater(int in){
return executor(in);
}
};
static bool yoloFunction(int in){
std::cout<<"LIVING LA VIDA LOCA: "<<in<<std::endl;
return false;
}
int main()
{
A myExecutor;
B lazyAss;
// Storing member function for later invocation
lazyAss.setExecutor(&myExecutor::doSomething);
bool result_1 = lazyAss.doSomethingLater(1337);
std::cout<<"The first result is "<<result_1<<std::endl;
// Storing regular function for later invocation
lazyAss.setExecutor(&yoloFunction);
bool result_3 = lazyAss.doSomethingLater(42);
std::cout<<"The second result is "<<result_2<<std::endl;
// Storing lambda function for later invocation
lazyAss.setExecutor([=](int in){
std::cout<<"P- P- P- POKERFACE!: "<<in<<std::endl;
return true;
});
bool result_3 = lazyAss.doSomethingLater(666);
std::cout<<"The third result is "<<result_3<<std::endl;
}
Это должно проиллюстрировать то, что я пытаюсь выполнить, а именно: сохранить какой-нибудь обратный вызов для последующего вызова .
Так как же мне поступить в современном C ++ самым простым способом?, без использования boost или других нестандартных зависимостей?
Какие есть варианты и предостережения?
Следует отметить, что подпись обратного вызова известна заранее и не изменится.
Кроме того, обратный вызов, который я хочу сохранить, может иметь различные формы, такие как отдельная функция, функция-член или лямбда-выражение.