我希望有一个像这样的共同父函数
void main (param 1, param 2)
{
<stuff to do>
param1();
print("The function %s was called", param 2);
<more stuff to do>
}
其中param 1将是要调用的函数的名称,param 2将是一些描述性文本。 param 2很简单,我已经解决了,但我不清楚如何通过传入函数名称从同一个父函数调用函数。这是父函数所做的一些其他事情,但不是让多个父函数只在他们调用的函数或带有switch语句的单个父项中有所不同,如果这种方式可行,则id更喜欢。有什么想法吗?
答案 0 :(得分:5)
你实际想要为param 1传递的是一个指向你想要调用的函数的函数指针,而不是该函数的名称。
看看这个关于函数指针的tutorial。
答案 1 :(得分:0)
这是什么语言?如果函数不是这种语言的一等公民,你就不能这样做
如果它类似于Java,你可以通过传入一个实现接口的对象来解决这个问题,并在对象上调用该函数。
答案 2 :(得分:0)
我会说函数指针是一件好事,但你可以利用预处理器来做你想做的事情......(学习如何使用函数指针虽然是好事)... < / p>
我的意思是,如果param2是静态已知的东西,那么拥有函数指针就没用了..如果你有动态值,那么函数指针会好一些,一旦你想给param2 = foo运行你的程序param2 = bar ...
你真的需要不同的功能原型,或者你能不能拥有......
#ifdef BAR
void foo() { whatever(); }
#elif defined(FOO)
void foo() { whocares(); }
#else
#define foo() do{} while(0)
#endif
并且始终具有相同的主体,但在命令行上给出不同的-D ...
答案 3 :(得分:0)
这样的东西?
#include <stdio.h>
void foo(void) { printf("foo\n"); }
void bar(void) { printf("bar\n"); }
static inline void parent(void func(), const char *msg)
{
/* do stuff */
func();
printf("%s called\n", msg);
/* more stuff */
}
int main(void)
{
parent(foo, "test1");
parent(bar, "test2");
return 0;
}
答案 4 :(得分:-2)
一般来说,这在C语言和编译语言中并不容易。 在Windows上,我有类似的东西(很长一段时间):
typedef void(* simple_void_function )()
HMODULE exe_module = GetModuleHandle( NULL ); // not sure about this
simple_void_function = GetProcAddress( exe_module, param1 );
(*simple_void_function)();
如果您愿意手动将args推入堆栈,实际的函数调用签名可以更灵活。