如何向类发送回调
how to send a callback to a class
本文关键字:回调 更新时间:2023-10-16
我有一个类:market simulator
,它有一个send_order(int qty, string symbol, double price)
由我的xyz_strategy
类调用的方法,这是一个正在测试的交易策略。当market_simulator
收到订单时,它会检查市场价格并决定是否可以填写订单。它的标题是这样的:
class market_simulator {
std::vector<order> orders;
static std::shared_ptr<market_simulator> instance;
std::map<std::string,std::shared_ptr<instrument> > instruments;
...
public:
static std::shared_ptr<market_simulator> market();
...
void send_order(int qty, std::string symbol, double price);
};
问题是我需要一种方法让market simulator
将填充报告发回给发件人。
我的第一次尝试是将指向类的指针发送到市场模拟器。但是,市场模拟器必须包括"xyz_strategy"(和其他策略),然后它也可以访问其所有方法。
我的第二次尝试是创建一个虚拟超类order_sender
,它有一个叫做fill_report(int qty, string symbol, double price)
的方法。现在市场模拟器只知道order_sender
,只能调用它的方法。但是现在战略有太多的超级类要实现。
如何在 c++ 中实现指向函数的指针,以便market_simulator
只知道此函数并在执行时调用它?
编辑:要向其发送指针的函数如下所示:
void on_execution(int quantity, std::string symbol, double price);
你至少有两个回调函数选项,1) 函数指针和 2)函数对象(函子)。
函数指针
使用指向函数的指针时,使用typedef
通常会使程序更具可读性:
typedef void (*Function_Pointer)(const std::string&);
然后,您可以将函数指针传递给另一个函数:
void Logger(Function_Pointer output_function)
{
output_function("Hello");
}
函数对象
函数对象是重载operator()
的class
或struct
。
struct Function_Object
{
void operator()(const std::string& text)
{
std::cout << text << "n";
}
};
您可以像传递任何其他对象一样传递函数对象:
void Logger_2(Function_Object& functor)
{
functor("Hello");
}
函数对象的一个很好的属性是,您可以为一系列回调定义抽象函数对象。
您可以使用函数指针或 lambda 表达式来委托所需的回调逻辑。
类似的东西;
void send_order(int qty, std::string symbol, double price, void (*callback));
// ...
send_order(1, "symbol", 1, []() -> void { // callback logic } )
相关文章:
- 架构决策:返回std::future还是提供回调
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 用于在回调中调用解析器的设计模式
- 如何使用C++对象的成员函数作为 C 样式回调?
- Java从C++回调到C++回调
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 从不同的 cpp 调用回调函数会导致bad_function_call
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 不带轮询的 SDL2 事件回调
- C++存储带有可变参数的回调
- 如何使用 Node-addon-API 实现 node-nan 回调
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 访问类C++ C 样式回调
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 在C++中实现回调
- C++ 事件管理器的回调,使用 std::function 和 std:bind 以及派生类作为参数