C++ 如何向类发送回调
我有一个类:C++ 如何向类发送回调,c++,architecture,C++,Architecture,我有一个类:market simulator,它有一个方法send\u order(整数数量、字符串符号、双倍价格),由我的xyz\u strategy类调用,这是一个正在测试的交易策略。当market\u simulator收到订单时,它会检查市场价格并决定是否能够完成订单。它的标题是这样的: class market_simulator { std::vector<order> orders; static std::shared_ptr<market_si
market simulator
,它有一个方法send\u order(整数数量、字符串符号、双倍价格)
,由我的xyz\u strategy
类调用,这是一个正在测试的交易策略。当market\u 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);
};
您至少有两个回调函数选项,1)函数指针和2)函数对象(函子) 函数指针 使用指向函数的指针时,使用
typedef
通常会使程序更具可读性:
typedef void (*Function_Pointer)(const std::string&);
然后可以将函数指针传递给另一个函数:
void Logger(Function_Pointer output_function)
{
output_function("Hello");
}
函数对象
函数对象是重载运算符()的类
或结构
函数对象的一个很好的属性是,您可以为回调函数族定义抽象函数对象。您至少有两个回调函数选项,1)函数指针和2)函数对象(functor)
函数指针
使用指向函数的指针时,使用typedef
通常会使程序更具可读性:
typedef void (*Function_Pointer)(const std::string&);
然后可以将函数指针传递给另一个函数:
void Logger(Function_Pointer output_function)
{
output_function("Hello");
}
函数对象
函数对象是重载运算符()的类
或结构
函数对象的一个很好的属性是,您可以为一系列回调定义抽象函数对象。您可以使用函数指针或lambda表达式来委托所需的回调逻辑
有点像
void send_order(int qty, std::string symbol, double price, void (*callback));
// ...
send_order(1, "symbol", 1, []() -> void { // callback logic } )
您可以使用函数指针或lambda表达式来委托所需的回调逻辑
有点像
void send_order(int qty, std::string symbol, double price, void (*callback));
// ...
send_order(1, "symbol", 1, []() -> void { // callback logic } )