在C中创建一个按钮结构

在C中创建一个按钮结构,c,C,我试图创建一个名为button ressource的结构,它将存储按钮的所有属性 我的问题是命令函数“void on select”应该是一个参数数量和类型都未知的函数现在我在一个函数上使用指针,该函数只接受一个我声明为结构元素之一的参数,但我需要一种更好的方法,以防我需要执行一个参数数量和类型未知的命令 struct button_ressource { unsigned char *image_off; unsigned char *image_on; unsign

我试图创建一个名为button ressource的结构,它将存储按钮的所有属性

我的问题是命令函数“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

您必须为所有回调找到一个通用的“协议”,或者使用一个由一堆不同回调组成的
联合(加上添加信息,以便您知道使用哪一个)或类似的东西

可以使用变量参数,但必须使用显式的
va_列表
参数,不能直接“传递”
部分


在您的解决方案中,即使我们假设您可以表达函数本身,您将如何处理参数?不能替换
int参数带有
任何参数[任何金额],在C中没有任何
东西,数组也不能有无限长。。。我试图说明你的“梦想解决方案”在C语言中不起作用。

在C语言中,你不能这样做

您必须为所有回调找到一个通用的“协议”,或者使用一个由一堆不同回调组成的
联合(加上添加信息,以便您知道使用哪一个)或类似的东西

可以使用变量参数,但必须使用显式的
va_列表
参数,不能直接“传递”
部分


在您的解决方案中,即使我们假设您可以表达函数本身,您将如何处理参数?不能替换
int参数带有
任何参数[任何金额],在C中没有任何
东西,数组也不能有无限长。。。我试图说明你的“梦想解决方案”在C语言中不起作用。

在C语言中,你不能这样做

您必须为所有回调找到一个通用的“协议”,或者使用一个由一堆不同回调组成的
联合(加上添加信息,以便您知道使用哪一个)或类似的东西

可以使用变量参数,但必须使用显式的
va_列表
参数,不能直接“传递”
部分


在您的解决方案中,即使我们假设您可以表达函数本身,您将如何处理参数?不能替换
int参数带有
任何参数[任何金额],在C中没有任何
东西,数组也不能有无限长。。。我试图说明你的“梦想解决方案”在C语言中不起作用。

在C语言中,你不能这样做

您必须为所有回调找到一个通用的“协议”,或者使用一个由一堆不同回调组成的
联合(加上添加信息,以便您知道使用哪一个)或类似的东西

可以使用变量参数,但必须使用显式的
va_列表
参数,不能直接“传递”
部分


在您的解决方案中,即使我们假设您可以表达函数本身,您将如何处理参数?不能替换
int参数带有
任何参数[任何金额],在C中没有任何
东西,数组也不能有无限长。。。我试图说明你的“梦想解决方案”在C语言中不起作用。

可能重复@Ôrel:disaggree!瓦拉格一点问题也没有。这看起来像是一个误入歧途的设计<从按钮外部调用“选择上的代码”
。它应该将相同的参数传递给所有按钮。其他信息将来自该应用程序。我不认为varargs是我正在寻找的按钮,您不需要任何其他信息:唯一有趣的是,该按钮被单击,并在您选择时调用了
。对于更复杂的GUI元素,您可以传递一个事件结构,该结构保存有关鼠标位置或在单击过程中按住的元键的信息,或列表框中所选项目的id等。可能重复@Ôrel:disaggree!瓦拉格一点问题也没有。这看起来像是一个误入歧途的设计<从按钮外部调用“选择上的代码”
。它应该将相同的参数传递给所有按钮。其他信息将来自该应用程序。我不认为varargs是我正在寻找的按钮,您不需要任何其他信息:唯一有趣的是,该按钮被单击,并在您选择时调用了
。对于更复杂的GUI元素,您可以传递一个事件结构,该结构保存有关鼠标位置或在单击过程中按住的元键的信息,或列表框中所选项目的id等。可能重复@Ôrel:disaggree!瓦拉格一点问题也没有。这看起来像是一个误入歧途的设计<从按钮外部调用“选择上的代码”
。它应该将相同的参数传递给所有按钮。其他信息将来自该应用程序。我不认为varargs是我正在寻找的按钮,您不需要任何其他信息:唯一有趣的是,该按钮被单击,并在您选择时调用了
。对于更复杂的GUI元素,您可以传递一个事件结构,该结构保存有关鼠标位置或在单击过程中按住的元键的信息,或列表框中所选项目的id等。可能重复@Ôrel:disaggree!瓦拉格一点问题也没有。这看起来像是一个误入歧途的设计<从按钮外部调用“选择上的代码”
。它应该将相同的参数传递给所有按钮。其他信息将来自应用程序。我不认为varargs是我正在寻找的