我正在将一些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中的多播代理 - 代码日志