c# – C中的多播代理

我正在将一些C#代码转换为C语言.我最初用C风格的回调取代了代表.但是,在进一步检查代码时,我意识到这不会起作用,因为委托以多播方式使用,使用(伪C#代码)语句,如:

DelegateTypeOne one = new DelegateTypeOne(someCallbackFunc1)
one += new DelegateTypeOne(someCallbackFunc2)

我理解,如果被移植的代码以单一的方式使用委托,那么使用常规的C样式函数指针可能有效.在那个问题上,我有一个问题,以下C代码是否有效?:

typedef std::vector<int> (CallbackTypeOne*) (const std::string& s, const bool b);
std::vector<int> foo (const std::string& s, const bool b);

CallbackTypeOne func_ptr = NULL;

func_ptr =  new CallbackTypeOne(foo);  // Note: new being used on a typedef not a type

// or should I just assign the func the normal way?
func_ptr =  foo;   // this is what I am doing at the moment

我实现代表的最初想法是编写一个名为Delegate的ABC,它将是一个仿函数.所有其他代表都将从这个ABC派生,他们将有一个STL容器(很可能是一个列表),它将包含一个按顺序调用的任何已分配函数的列表.

这似乎是相当多的工作,我甚至不相信它是最合适的方法.有没有人之前做过这种C#到C traqnslation,在C中实现多播委托的推荐方法是什么?

最佳答案
我有两个可能的解决方案提案

>使用函数指针向量,而不是函数指针.定义一个包含回调向量的类,并且具有operator(),当调用它时将调用回调
>使用boost signals

转载注明原文:c# – C中的多播代理 - 代码日志