Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在C中执行类似std::bind的操作?_C_Function_Function Pointers - Fatal编程技术网

有没有办法在C中执行类似std::bind的操作?

有没有办法在C中执行类似std::bind的操作?,c,function,function-pointers,C,Function,Function Pointers,所以我有一个类型为void(*actionOnM)(void*myTypeInstance)的函数,我需要将它包装成void(*action)()。这在C语言中可能吗?您可以使用一个包装函数,然后传递一个默认参数,大概是NULL,比如 void action() { actionOnM(NULL); } P>我相信C++如果你设置了一个默认参数,用于 Actuon on()/Cux>,所以它仿真了.< /p> 你可以有一个包装器函数,然后传递一个默认参数,大概是代码> null <

所以我有一个类型为
void(*actionOnM)(void*myTypeInstance)
的函数,我需要将它包装成
void(*action)(
)。这在C语言中可能吗?

您可以使用一个包装函数,然后传递一个默认参数,大概是
NULL
,比如

void action()
{
    actionOnM(NULL);
}

<> P>我相信C++如果你设置了一个默认参数,用于<代码> Actuon on()/Cux>,所以它仿真了.< /p> 你可以有一个包装器函数,然后传递一个默认参数,大概是代码> null < /C> >,像

void action()
{
    actionOnM(NULL);
}

<> P>我相信C++如果你为代码> Actuon on()/Cuth>设置默认参数,那么它就可以仿真了。

你可以用下面的规则(C)简单地翻译(简单)C中的C++:

    类C++包含在仅包含属性(无方法)的C结构中
  • C++方法是以指向对象(这里是结构)的指针作为第一个参数的C函数
以下是您的数据:

  • 指向接受void*参数并返回void的函数的指针
  • 指向参数的指针
但您不会将其作为指向函数的指针传递,而是作为指向结构的指针传递:

typedef struct _binder {
    void (*action)(void *param);
    void *param;
} binder;
当您想绑定
actionm(&myTypeInstance)
时,只需执行以下操作:

binder *bind = malloc(sizeof(binder));
bind->action = &actionOnM;
bind->param = &myTypeInstance;
然后可以将绑定函数作为单个参数
bind
传递:

void otherFunct(binder *bind, int otherParam) {
    /* ... */
    bind->action(bind->param); /* actual call to bound function */
    /* ... */
}
稍后当然是免费(绑定):-)

如果你想让所有这些都接近C++,只需定义一个执行函数:

void bind_call(binder *bind) {
    bind->action(bind->param);
}
其他功能将变成:

void otherFunct(binder *bind, int otherParam) {
    /* ... */
    bind_call(bind); /* actual call to bound function */
    /* ... */
}

<>通常可以用下面的规则(C)来解释(C)C++中的C++:< /P>
    类C++包含在仅包含属性(无方法)的C结构中
  • C++方法是以指向对象(这里是结构)的指针作为第一个参数的C函数
以下是您的数据:

  • 指向接受void*参数并返回void的函数的指针
  • 指向参数的指针
但您不会将其作为指向函数的指针传递,而是作为指向结构的指针传递:

typedef struct _binder {
    void (*action)(void *param);
    void *param;
} binder;
当您想绑定
actionm(&myTypeInstance)
时,只需执行以下操作:

binder *bind = malloc(sizeof(binder));
bind->action = &actionOnM;
bind->param = &myTypeInstance;
然后可以将绑定函数作为单个参数
bind
传递:

void otherFunct(binder *bind, int otherParam) {
    /* ... */
    bind->action(bind->param); /* actual call to bound function */
    /* ... */
}
稍后当然是免费(绑定):-)

如果你想让所有这些都接近C++,只需定义一个执行函数:

void bind_call(binder *bind) {
    bind->action(bind->param);
}
其他功能将变成:

void otherFunct(binder *bind, int otherParam) {
    /* ... */
    bind_call(bind); /* actual call to bound function */
    /* ... */
}

您对此有什么问题?为了能够获取指向
actionm(data1)
<代码>actionm(dataN)在运行时(指针看起来像
void(*action)(
)。这有什么问题吗?要获得指向
actionm(data1)
<代码>actionm(dataN)在运行时(指针看起来像
void(*action)(
)。主要思想是能够将变量绑定到函数指针中(不是空的,而是任何给定的,如果可能的话不是在编译时指针中定义的)@DuckQuen,这在c中是不可能的,因为C++中的代码> STD::BION/CODEX>类可能会存储指针,然后在调用它时将它传递给函数,但是在C中你不能这样做,你能给出一些上下文吗?谁将函数指针作为参数?主要思想是能够将变量绑定到函数指针中(不是空的,而是任何给定的,如果可能的话,不是在编译时指针中定义的)@DuckQuen,这在c中是不可能的,因为C++中的代码> STD::BION/CODEX>类可能会存储指针,然后在调用它时将它传递给函数,但是在C中你不能这样做,你能给出一些上下文吗?谁将函数指针作为参数?