web-dev-qa-db-ja.com

C ++での「[this]」の意味

Cocos2dx 3.0 AP​​Iを読んでいたとき、次のようなものを見つけました。

auto listener = [this](Event* event){
    auto keyboardEvent = static_cast<EventKeyboard*>(event);
    if (keyboardEvent->_isPressed)
    {
        if (onKeyPressed != nullptr)
            onKeyPressed(keyboardEvent->_keyCode, event);
    }
    else
    {
        if (onKeyReleased != nullptr)
            onKeyReleased(keyboardEvent->_keyCode, event);
    }
};

[this]はどういう意味ですか?この新しい構文はC++11にありますか?

45
1hunch1kill

[これ]はどういう意味ですか?

lambda -呼び出し可能な関数オブジェクトを導入します。 thisを角かっこで囲むことは、ラムダcapturesthisを意味するため、このオブジェクトのメンバーはその中で使用できます。 。リンク先のページで説明されているように、ラムダは値または参照によってローカル変数をキャプチャすることもできます。

ラムダにはoperator()のオーバーロードがあるため、関数のように呼び出すことができます。

Event * event = some_event();
listener(event);

ラムダの本体で定義されたコードを実行します。

これはC++ 11の新しい構文ですか?

はい。

57
Mike Seymour