C++11 では、ラムダ式を引数として取る関数をどのように宣言しますか? ラムダを宣言したり、テンプレート パラメーターとして受け取ったりするためのリソースをオンラインでたくさん見つけることができますが、私が本当にやりたいことは、クロージャーによって可能になるのと同様に、宣言が簡単なコールバック ハンドラーとしてラムダを利用できるようにすることです。 JavaScript と Objective-C のコード ブロックで。
基本的に、ラムダに置き換えたい古典的な C++ 構造は次のようなものです。
class MyCallback {
public:
virtual ~MyCallback() {}
virtual void operator(int arg) = 0;
};
void registerCallback(const std::shared_ptr<MyCallback> &);
void foo(void) {
int a, b, c;
class LocalCallback: public MyCallback {
int a, b, c;
public:
LocalCallback(int a, int b, int c): a(a), b(b), c(c) {}
void operator(int arg) { std::cout << (a+b+c)*arg << std::endl; }
};
registerCallback(std::shared_ptr<MyCallback>(new LocalCallback(a,b,c)));
}
これは次のように簡略化されます。
void registerCallback(/* WHAT GOES HERE? */);
void foo(void) {
int a, b, c;
registerCallback([=](int arg){std::cout << (a+b+c)*arg << std::endl; })
}
それで、私が書いたところはどうなり/* WHAT GOES HERE? */
ますか?
編集:これは、すぐに消費されて呼び出されるのではなく、後でコールバックされるようにコールバックを格納するためのものです。