如何将函子存储在C 中以后调用
How to store a functor for later invocation in C++
这个问题可能是天真的,如果是这样,请在我学习时原谅我。
请考虑以下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或其他非标准依赖关系?
有哪些选择和警告?
要注意的事情是,回调的签名是事先知道的,不会更改。
我要存储的回调可能具有不同的形式,例如独立函数,成员函数或lambda。
像这样修改结构B:
struct B {
std::function<bool(int)> executor;
void setExecutor(std::function<bool(int)> f) {
executor = f;
}
bool doSomethingLater(int in) {
return executor(in);
}
};
在main()中,使用lambda以这样的参数传递成员函数:
lazyAss.setExecutor([&](int i)->bool { return myExecutor.doSomething(i); });
相关文章:
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- 在C++中调用 MS SQL 存储过程
- opengl-VAO也存储Texrture单元调用
- C++:对象将 lambda 存储到结构中,稍后调用该函数
- 多次调用存储过程时C++连接器"Commands out of sync" mySQL
- C++调用存储在映射结构中的函数指针
- LLDB API:如何调用存储在SBValue中的对象的方法
- 如何在 c++ 结构中的 void* 变量中调用存储函数(回调)
- 如何调用存储在映射中的函子
- 调用存储在映射中的模板化std::函数
- C++使用不同的类作为方法的'this'调用存储在类中的方法的正确语法是什么?
- 运行时检查失败 #0 - (ESP 的值未正确保存) - 调用存储在结构中的函数时
- 调用存储在std映射中的成员函数指针
- 调用存储在向量中的对象的成员函数
- SQL Server-使用C++ODBC调用存储过程
- 无法调用存储在容器中的指针上的公共方法
- std::atomic::无法在 ctor 初始化列表中调用存储
- 如何从精神语义规则绑定/调用存储在fusion::vector中的boost::函数
- 调用存储过程时未检索到任何数据
- 如何使用 table 类型的参数调用存储过程