0

我希望有一个像这样的共同父函数

void main (param 1, param 2)
{
    <stuff to do>
    param1();
    print("The function %s was called", param 2);
    <more stuff to do>
}

其中参数 1 将是要调用的函数的名称,参数 2 将是一些描述性文本。参数 2 很简单,我已经解决了,但我不清楚如何通过传入函数名称从同一个父函数调用函数。父函数还有一些其他的功能,但与其拥有多个仅在调用的函数上有所不同的父函数或具有 switch 语句的单个父函数,id 更喜欢这种方式。有什么想法吗?

4

5 回答 5

5

您实际上要为参数 1 传递的是指向您要调用的函数的函数指针,而不是该函数的名称。

看看这个关于函数指针的教程。

于 2009-05-29T14:22:40.313 回答
0

这是什么语言?如果函数不是这种语言的一等公民,你就不能这样做

如果它类似于 Java,您可以通过传入一个实现接口的对象来解决这个问题,然后在该对象上调用该函数。

于 2009-05-29T14:00:33.727 回答
0

我会说函数指针是一件好事,但你可以利用预处理器来做你想做的事......(虽然学习如何使用函数指针是一件好事)......

我的意思是,如果 param2 是静态已知的,那么拥有函数指针就毫无用处了。如果你有动态值并且在运行程序时你想给 param2 = foo 然后 param2 = bar,那么函数指针会更好...

你真的需要不同的函数原型还是你有类似的东西......

#ifdef BAR
 void foo() { whatever(); }
#elif defined(FOO)
 void foo() { whocares(); }
#else
 #define foo() do{} while(0)
#endif

并且始终具有相同的主体,但在命令行上给出不同的 -D ...

于 2009-05-29T15:40:42.107 回答
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;
}
于 2009-05-29T23:43:38.667 回答
-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 压入堆栈,则实际的函数调用签名可以更加灵活。

于 2009-05-29T14:21:44.183 回答