在 C 中创建一个按钮结构

标签 c

我正在尝试创建一个名为按钮资源的结构,它将存储按钮的所有属性。

我的问题是命令函数"void on select",它应该是一个带有未知数量和参数类型的函数,现在我正在使用指针一个只接受一个参数的函数,我已将其声明为结构元素之一,但我需要一种更好的方法,以防我需要执行具有未知数量和参数类型的命令。

struct button_ressource 
{
    unsigned char *image_off;
    unsigned char *image_on;
    unsigned int width
    unsigned int h;
    void (*on_select)(void *data);  // the button command
    int param;  // this param will be passed to the on_select command
};
typedef struct button_ressource button_res; 

最佳答案

你不能这样做,在 C 中。

你将不得不为所有回调找出一个通用的“协议(protocol)”,或者使用一堆不同的union(加上添加信息以便你知道使用哪个)或类似的东西。

可以使用变量参数,但是你必须使用显式的va_list参数,你不能“传递”... 直接部分。

在您的解决方案中,即使我们假设您可以表达函数本身,您将如何处理参数?您不能将 int param; 替换为 anything param[ANY_AMOUNT];,C 中没有 anything 并且数组不能有一个无限长的......我试图说明你的“梦想解决方案”在 C 中不起作用。

关于在 C 中创建一个按钮结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28850415/

相关文章:

c - 错误 : initializer element is not computable at load time

c - 如何从文本文件中读取数据

c - malloc 不转换为结构

c - 如何管理链表中的不同种类的数据?

c 客户端发送 char 但服务器正在接收数字

c - 读取一个文件、解析并写入另一个文件

c - 如何在没有定义 main() 的情况下让 cgo 构建目标文件?

c - 如何在 C 中将字符串添加到 PUNICODE_STRING 的末尾

c - 删除 GWAN KV 存储结构时如何防止竞争条件?

c - 字符串转换时 strtol 结果不匹配