gpt4 book ai didi

c++ - 发送 void 类型定义的函数指针作为要调用的参数

转载 作者:行者123 更新时间:2023-11-27 23:23:20 25 4
gpt4 key购买 nike

我不知道我正在尝试做的事情是否可行,但我很高兴。它将真正证明 C++ 是一门强大的语言。

所以,我有一个 DLL 和一个使用 DLL 导出的函数的 EXE。该函数接受一个参数,该参数是或必须是指向另一个函数的指针,并执行它。像这样:

extern void RunFunction(void (*FunctionPonter)()) {
(*FunctionPonter)();
}

我这样调用它:

RunFunction(&FunctionToExecute);

作为参数发送的函数将没有参数,只有一个 void 函数。

因此,所有这些都有效,正如此处所展示的那样。现在,我想更进一步,将 (*void)() 定义为,例如,Action

typedef (*void)() Action;

Action FunctionToExecute() {
// My code. This function won't return results - void
}

我想像这样将指针发送到我的 DLL 中的函数:

// This is how it would be declared now in the DLL
extern void RunFunction(void (ACTION) {
(*FunctionPonter)();
}

// and this is how I would like to use it
RunFunction(FunctionToExecute);

我正在使用 VC2010,如果可能的话,我不知道该怎么做。感谢您的想法、解释和帮助!

最佳答案

首先,函数类型 typedef 的正确语法是

typedef void (*Action)();

其次,函数类型的 typedef-name 可用于声明该类型的函数,但不能用于定义此类函数。 IE。如果 FunctionToExecute 是您要通过指针执行的函数,那么它必须定义为

void FunctionToExecute() {
/* whatever */
}

调用函数定义为

void RunFunction(ACTION p) {
p();
}

对它的调用如下所示

RunFunction(FunctionToExecute);

就是这样。一元 *& 运算符对于函数指针是可选的。

关于c++ - 发送 void 类型定义的函数指针作为要调用的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11283397/

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