gpt4 book ai didi

c - 如何在C中处理任意数据集

转载 作者:行者123 更新时间:2023-11-30 15:07:38 25 4
gpt4 key购买 nike

我目前正在学习编码(主要用 C 语言,但也有其他语言),现在在几个项目中我遇到了同样的“问题”:

我经常必须处理任意数据集。例如,我可能需要编写一个程序,该程序将以其标准形式接受一定数量的命令(例如 11 个),但我想编写一个灵活的代码,例如,如果我来稍后回到这个项目并想要添加其他命令,我希望能够轻松地做到这一点。

我需要在代码中的某个位置手动输入这些命令的名称。我目前喜欢的一种方法是使用结构数组,每个元素包含一个 char* 作为命令名称,以及一个函数指针作为负责命令执行操作的函数。

问题是,到目前为止,我还没有真正以完全令我满意的方式实现这个数组。

我从中得到的最接近的是通过单例,每次我需要数组时,我只需调用我的单例,但从那时起我了解到单例本质上会带来与全局变量相同的问题。我已经了解了一些有关依赖注入(inject)的知识,但这似乎只适用于面向对象语言的原则。

有没有办法不使用单例来完成我想要在 C 中执行的操作?

长话短说:我需要在代码中构建任意数据集,如何以优雅且易于维护的方式实现这一点?

感谢所有花时间回答的人。

示例:

我有一个程序可以监听标准输入上的命令,然后执行这些命令。每次读取输入时,我都会将其与预定的命令列表(以字符串的形式)进行比较,然后如果命令匹配则执行适当的代码。

您将如何创建字符串集?您将如何创建与每个字符串相对应的函数集?您如何将这两个集合连接在一起?您如何使这个组合集可以在任何地方轻松访问?

到目前为止我对此的回答是:

s_cmds *singleton(void)
{
static s_cmds ret[] = {{"cmd1", &func_cmd1}, {"cmd2", &func_cmd2}, ...};
return (ret);
}

具有结构:

struct s_cmds {
char *cmd;
void (*func_cmd)(...);
};
这样,无论我想让我的代码如何发展,如果我想添加一个命令,我只需要在我的单例中添加一个元素,如果我想在代码中的其他地方访问这个数组,我只需要调用单例。但这本质上就像使用全局变量不是吗?

有没有一种“更干净”的方法来做到这一点?

最佳答案

您的描述非常模糊,但我认为您正在寻找 X-Macros:

https://en.wikipedia.org/wiki/X_Macro

它是一个代码构造,用于将不同类型的相关代码绑定(bind)在一起。常见用例是处理错误代码及其文本表示。

关于c - 如何在C中处理任意数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38054149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com