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 } )