【发布时间】:2021-10-29 09:52:49
【问题描述】:
我现在有一个函数A(int num)。我想得到另一个函数B(int num),它在执行A(num)之前运行另一个函数C()。我打算写的是这样的
typedef void (*function_type)(int);
function_type attachToFunction(function_type original, void (*additional_function)(void))
{
/* return a function_type which first runs additional_function, and then runs original(int) */
}
但是,我不知道我应该如何完成该功能或是否有可能。
我同时使用 C 和 C++,所以只要函数声明不变,C++ 实现也是可以接受的。
【问题讨论】:
-
看起来你想要一个闭包。你能做的最好的是将信息存储在一个结构中,然后调用一个将结构作为参数的函数,从该结构中获取函数指针。在 C++ 中,您可以使用类并将调用作为方法。
-
正如 Jarod42 和 Tom 提到的那样,以
function_type作为返回类型,它不能像捕获 lambda 那样携带任何其他信息。 example -
您需要澄清这是 C 还是 C++,因为在这种情况下,答案可能因语言而异。
-
这听起来像是一个非常确定的“XY”问题。你认为创建一个新的函数类型是你试图解决的实际问题的正确解决方案,但你不能让它工作。与其问如何解决问题的错误解决方案,不如问解决实际问题的最佳解决方案。
-
通常在 C 中,这样的函数指针都包含一个
void*参数用于关联数据。在 C++ 中,您可以将代码和数据打包到一个类中,这样就不需要了。