C++:使用回调机制调用函数

C++: call a function using callback mechanism

本文关键字:机制 调用 函数 回调 C++      更新时间:2023-10-16

我对C++中的boost函数和回调机制非常陌生。在以下情况下,我找不到使用回调机制的方法:

在组件C1上,我有函数f1。在另一个组件C2上,我有函数f2。在正常流程中,f1()f2()之前被调用。我需要在f1()之前调用f2(),但我遇到了困难,因为它们是在不同的软件组件上实现的(但在同一个本地存储库中),具有逻辑规则:C2知道C1,但C1不知道C2。

理论上,一个可能的解决方案是使用提升函数指针p2f2(),然后创建一个函数。下面我试图通过服务器来模拟组件C2。代码属于组件C1,我正试图从服务器(C2)调用一个函数:

#include <iostream>
#include <boost/function.hpp>
#include <list>
#include <stdio.h>
using namespace  std;
using namespace boost;
struct server
{
void func(int i, char a)
{
printf(" %d %c n", i,a);
}
};
typedef boost::function<void(server*, int,char)> my_func_t;
int main()
{
my_func_t var = &server::func;
server s;
var(&s , 10, 'a');
}

输出是10 a,这是应该的。

我尝试使用boost功能,因为有两个软件组件:C1和C2。C1不知道C2,但C2知道C1(逻辑约定)。问题是从C1调用C2中的函数,所以我不能用标准的方式只创建一个对象并调用该方法。

这是个好方法吗?如果是,我必须更新这个问题。

非常感谢!

我认为最简单的情况可能只是包装调用,假设您需要能够在运行时在正常和非正常之间任意切换:

void call_it(bool normal)
{
if(normal)
{
f1();
f2();
}
else
{
f2();
f1();
}
}