2011-08-22 16 views
8

私は関数ポインタとそれを他の関数のパラメータとして使うことについて読んできました。私の質問は、ポインタを使わずに関数を参照で渡す方法です。私はインターネット上で答えを見つけようとしていますが、良い答えは見つかりませんでした。私はあなたが参照のように変数を渡すことができることを知っています:void funct(int& anInt);。どのようにこれに似たようなことをしますか?変数への参照の代わりに、関数への参照がパラメータですか?また、関数本体の関数への参照をどのように使用しますか?C++:関数への参照を別の関数に渡すにはどうすればよいですか?

+0

注:あなたは関数を渡すことはできません。関数への参照またはポインタのみを渡すことができます。 –

答えて

22
#include <iostream> 
using namespace std; 

void doCall(void (&f)(int)) 
{ 
    f(42); 
} 

void foo(int x) 
{ 
    cout << "The answer might be " << x << "." << endl; 
} 

int main() 
{ 
    doCall(foo); 
} 

乾杯& HTH、

+1

ちょうど好奇心から、なぜ関数への参照の代わりに関数への参照を使用したいのですか? – fredoverflow

+10

@FredOverflow:ポインタがnullでも無効でもかまいません。参照が有効であり、ヌルでないこと(ヌル参照がない)、またはプログラムにエラーがあることが保証されています。 –

+4

@Alf P. Steinbach: "それ以外の場合は、プログラムにエラーがあります"それは理論的には大変ですが、 'sometype&ref = * ptr;のようなものがあれば、ポインタのアドレスは単純にアドレスにコピーされます参照には有効ではないか、nullである可能性があります。上記のステートメントは、 'ptr'が無効であるかヌルであるときには未定義の動作ですが、コンパイル時や実行時にはこれが表示されないので、プログラマが確実に確認する必要がありますポインタを使用した場合と同じように、有効でnull以外です。だから、私はプログラマーに違いがないと言います。 – newacct

関連する問題