1

VC2012 では、ラムダ関数がキャプチャ リストなしで使用されている場合、コンパイラは呼び出し規約を自動的に処理します。例えば

EnumWindows([](HWND, LPARAM){ return TRUE; }, 0); // compile with no problem

しかし、キャプチャ リストに this ポインターを配置すると、コンパイルに失敗しました。例えば

EnumWindows([this](HWND, LPARAM){ return my_class_member_function(); }, 0); // error

ラムダ関数内でメンバー関数を呼び出す方法があるかどうか誰かに教えてもらえますか?

ありがとう、マイルズ

4

3 に答える 3

2

問題は呼び出し規約にはありません。問題は、ラムダをキャプチャしても関数へのポインターへの変換が提供されないため、関数へのポインターが期待される場所にそのようなラムダを渡すことができないことです。

于 2013-10-20T09:00:18.687 に答える
1

ステートレス ラムダ関数のみが関数ポインターに減衰できます。状態を ( をキャプチャしてthis) 追加すると、この機能はなくなります。

于 2013-10-20T08:59:06.040 に答える