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 に答える