申し訳ありませんがこれまでに質問されているが、私はそれを見つけることができませんでした。関数ポインタの代わりに値(?)で関数を渡す?
私はテンプレートと新しいC++ 11の機能(主にラムダ、私はいつも他の言語で好きなもの)について教えています。
しかし、私のテストで私はそれが働いていたわからなかった、と私はそれがどのように動作するかを理解しようとしているが、それを把握するカント何かに来ました。..
次のコード:
template <class Func>
void Test(Func callback) {
callback(3);
}
void Callback(int i) {
std::cout << i << std::endl;
}
int main(int argc, char** argv) {
Test(&Callback); // this I was expecting to work, compiler will see its a pointer to a function
Test(Callback); // this also works, but how?!
return 0;
}
テンプレートの仕組みを理解していれば、基本的にはコンパイラが何をビルドするのかを知るスキームなので、最初のコールTest(&Callback);
コンパイラはテンプレートが関数アドレスを受け取り、ポインタである。
しかし、2回目の呼び出しは何ですか?それを前提としたテンプレートは何ですか? functioのコピー(もしそれが意味をなささえすれば)?
答えに感謝します。ですから、テンプレートを使用してTestを宣言しなかった場合、void Test(void(* callback)(int)){...}でも両方の呼び出しがうまくいくでしょう。知っていることは良いことだ。あなたがリンクしているスレッドを読んでいることを確認してください。 – sap