将类成员函数作为回调传递
在尝试将类成员函数作为 API 的回调传递时,您可能会遇到编译错误由于缺少参数列表。要解决此问题,建议使用函数指针或捕获类实例的 lambda 表达式。
函数指针
错误消息建议使用 '&CLoggersInfra:: RedundancyManagerCallBack' 创建指向该成员的指针。这是因为类成员函数通常采用两个参数:第一个参数是指向类实例的指针,第二个参数是函数的参数。
void (CLoggersInfra::*ptr)(int); // Function pointer type ptr = &CLoggersInfra::RedundancyManagerCallBack;
但是,函数指针方法需要您可以显式指定第一个参数,这可能不适用于所有场景。
Lambda 表达式(C 11 和稍后)
Lambda 表达式提供了一种更简洁灵活的方式来捕获类实例并创建回调函数:
auto lambda = [this](int arg) { this->RedundancyManagerCallBack(arg); };
这个 lambda 表达式捕获 'this' 指针并定义一个采用整数参数“arg”的匿名函数。然后,您可以将 lambda 作为回调传递:
m_cRedundencyManager->Init(lambda);
结论
通过使用函数指针或 lambda 表达式,您可以有效地将类成员函数作为回调传递,同时遵守 API 要求并避免编译错误。 Lambda 表达式在 C 11 及更高版本中特别方便,因为它们简化了类实例的捕获。
以上是如何将 C 类成员函数作为回调传递给 API?的详细内容。更多信息请关注PHP中文网其他相关文章!