0

这可能是一个相当不寻常的问题(我敢肯定这个标题很有误导性),但是在 C/Objective c 中以某种方式有可能将实际的函数调用传递给另一个函数,而不更改签名?这意味着一旦我尝试获取变量的值就会调用该函数?(我已经尝试过使用函数指针,但当然为此我需要更改签名)..

为了更好地理解,这是我想要实现的(虚构)示例。(请注意, foo 必须被视为私有 API)

int foo(double a) {
    print(a);
    print(a);
    print(a);
}


double globalCount = 1.0;
double count() {

    return globalCount++;

}

int main() {
    foo(globalCount());   // I know this syntax would evaluate globalCount() first...
}

预期输出:

1
2
3

如果一些糟糕的巫术可以让这发生,我会很高兴......

4

2 回答 2

0

您可以使用指向函数的函数指针double count(void) 来声明接受另一个函数的函数double(*func)(void),有关函数指针的更多信息,请参见: http: //www.newty.de/fpt/intro.html#what

#include<stdio.h>

/*takes a pointer to function return type changed to void*/
void foo( double (*func)(void) ) {
    printf("%1.0f\n",func() );
    printf("%1.0f\n",func() );
    printf("%1.0f\n",func() );
}


double globalCount = 1.0;
double count(void) {

    return globalCount++;

}

int main() {
    foo( &count );
    return 0;  
}
于 2013-06-20T21:41:02.983 回答
0

这应该这样做:

typedef double (*FUNC_PTR)(void);

void foo ( FUNC_PTR funcPtr )
{
  print( (*funcPtr)( ) );
  print( (*funcPtr)( ) );
  print( (*funcPtr)( ) );
}

double globalCount = 1.0;
double count() {
    return globalCount++;

}

int main() {
    foo( &count );
}
于 2013-06-20T21:22:40.490 回答