如何创建 C 工厂函数?

Sco*_*ott 4 c

我有一个带有函数指针的结构,如下所示:

typedef int (*node_transition_func)( wint_t );

typedef struct lex_dfa_arc_t {

    node_transition_func func;
    int expected_return_val;
    struct lex_dfa_node_t * node;

} LEX_DFA_ARC_T;
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个返回原型“int func( wint_c );”的函数的函数 例如:

node_transition_func input_equals( wint_t input, wint_t desired ) { ... }
Run Code Online (Sandbox Code Playgroud)

上面的函数在C语言中是否可以实际工作?我试图避免为每个字母定义一个函数(例如 input_equals_letter_a、input_equals_letter_b、input_equals_letter_c 等)。

我的另一种方法是让 node_transition_func 接受所需字符的 wint_t 和 wchar_t* ,但我很好奇我的第一种方法是否有效。

谢谢!

edg*_*eis 5

您基本上可以通过返回一个包含函数指针和绑定变量的结构来模拟闭包和柯里化,而不是“返回函数”。有了几个#define,它甚至可能看起来还算正常。

OTOH,当你使用某种特定的语言时,你应该坚持它的习语。闭包不是 C 的强项。我建议您不要尝试在 C 代码中过于通用,如果有疑问,只需使用 switch(){} 即可。