有没有办法在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函数
- 指向接受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函数
- 指向接受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中你不能这样做,你能给出一些上下文吗?谁将函数指针作为参数?