Tag: dispatch

动态调度,C

我正在使用以下scala代码尝试使用虚方法表(动态调度)将此代码转换为C. 这是scala中的代码: abstract class Node(n: String) { val id = Node.next var name: String = n def size: Int def nrNodes: Int = 1 def find(q: String): Set[Node] = if(name.contains(q)) Set(this) else Set() } 我的问题是这部分代码: def find(q: String): Set[Node] = if(name.contains(q)) Set(this) else Set() 我想把它翻译成C,这就是我到目前为止所做的: Set find(Node *n, char * s){ if(strstr(s,n->name)!=0){ return (Set) n->name; […]

如何在C中实现动态调度表

首先,我了解如何使用函数指针和字符串或其他查找来实现调度表,这不是挑战。 我正在寻找的是在编译时动态地向该表添加条目的一些方法。 我希望的代码结构类型如下: Strategy.h – 包含调度程序和调度表定义的函数定义Strategy.c – 包含调度程序的代码 MyFirstStrategy.c – 包括Strategy.h并提供策略MyOtherStrategy.c的一个实现 – 包括Strategy.h并提供策略的第二个实现 我们的想法是,将函数指针和策略名称插入到调度表中的代码不应该存在于Strategy.c中,而应该存在于各个策略实现文件中,并且查找表应该以某种方式在编译时动态构造。 对于固定大小的调度表,这可以如下管理,但我想要一个动态大小的表,我不希望Strategy.c实现必须包含实现的所有头文件,我想要调度要在编译时构造的表,而不是运行时。 固定大小示例 Strategy.h typedef void strategy_fn_t(int); typedef struct { char *strategyName; strategy_fn_t *implementation; } dispatchTableEntry_t; MyFirstStrategy.h #include “Strategy.h” void firstStrategy( int param ); MyOtherStrategy.h #include “Strategy.h” void otherStrategy( int param ); Strategy.c #include “Strategy.h” #include “MyFirstStrategy.h” #include “MyOtherStrategy.h” dispatchTableEntry_t dispatchTable[] = […]