2015-12-05 21 views
6

私は以下の単純な関数を呼び出す関数を呼びたいと思いますが、関数は複数の関数によって呼び出されるため、関数を呼び出す関数を特定して呼び出す必要があります。それを呼び出した関数を呼び出す関数を取得するにはどうすればよいですか?

int wrong() 
{ 
    std::cout << "WRONG \n"; 
    return 0; 
} 

フォローアップとして、これはボイドとして表現したほうが良いでしょうか?

+3

あなたに電話した機能を判断する標準的な方法はありません。おそらく、あなたの環境には現在の呼び出しスタックを取得する方法がありますが、それも非標準的な方法です。 – PaulMcKenzie

+0

一般的に言うと、あなたはこれをしたくありません。あなたは再帰的なループで終わるかもしれません。実際に解決しようとしている問題は何ですか? –

+0

私はユーザーがとるテストのような簡単なテストを作成しようとしています。彼らが間違って答えるたびに、私はこの関数を呼びたいと思いますが、メインに戻って次の質問を読むのではなく、ユーザーが間違っているという質問に戻ってほしいのです。 – ticklemyiguana

答えて

3

コールバックです。

typedef int (*CallbackType)(char c); 

int wrong(CallbackType callback) 
{ 
    std::cout << "WRONG \n"; 
    int r = callback('x'); 
    return r; 
} 

int also_wrong(char c) 
{ 
    return wrong(also_wrong); 
} 

もちろん、これは暴走再帰になりますので、多くのトラブルにあなたを取得しますが、それは間違いなくあなたの質問に答える: コールバックはC++で、次のように実装されています。

はい、返り値が0の場合は、voidを返すとよく表現される関数のようなものです。

+0

面白いです。そこには私がまだ分かっていないことがいくつかあります - 私はC++とプログラミング全般について全く新しいですが、私はそれを見ていきます。 – ticklemyiguana

+1

これはOPの問題に対する最善の解決策ではありません –

+1

OPは彼の住宅ローンにも問題があるかもしれません。私たちはその責任を負いません。彼は質問をした、私は正確に答えた、私は彼が答えを使用する場合に起こることについての警告を含めるまで行った。私は彼をカバーしたと思う。 –