thisラムダでのキャプチャが明示的に使用することがわかった例。例えば:
capturecomplete = [this](){this->calstage1done();};
しかし、それを暗黙的に使用することも可能であるようです。例えば:
capturecomplete = [this](){calstage1done();};
これをg ++でテストし、コンパイルしました。
これは標準のC ++ですか?(もしそうなら、どのバージョンか)、またはそれは何らかの拡張形式ですか?
私はこれをある程度見ることができますが、同時に、単純なタスクであるべきものについては恐ろしく冗長に思えます。
—
プラグウォッシュ
MSVC(多分2015年のみ)でも
—
Flamefire
this、ラムダでのキャプチャと使用に問題があり、MSVCを明示的に使用する理由にもなります
@plugwash:開発者は常に怠惰であり、物事を最小限に抑えようとする傾向があり、言語デザイナーも例外ではありません。ただし、あいまいさを解決するために冗長性が必要になることがよくありますが、ここではそうです。
—
14:43
this->明示的に使用する理由として考えられるのは、明示的に取得した値が明示的に使用されるようにするためです。キャプチャされない[](){ calstage1done(); }ため、合法ではないことに注意してくださいthis。しかし、this明示的にキャプチャする場合、キャプチャされた値を実際に使用しないのに関数本体が一目で見えるのは驚くべきことです[this](){ calstage1done(); }。