2016-06-18 7 views
0

これはかなり問題ではないかもしれませんが、私はそれを自分で理解することはできませんでした。lambda内の外部コンテキストへのアクセス

だから、私は次の関数にラムダを渡すしようとしています:

wiringPiISR(int pin, int mode, void (*function)()) 

...これで結果何:私は

wiringPiISR(Pin::BELL, INT_EDGE_RISING, [] {}); 

...と動作しているようですので、明らかに関数を指す代わりにラムダを使うことができます。このエラーメッセージになり何

wiringPiISR(Pin::BELL_1, INT_EDGE_RISING, [this] { 
    onInterrupt(Pin::BELL_1); 
}); 

wiringPiISR(Pin::BELL_2, INT_EDGE_RISING, [this] { 
    onInterrupt(Pin::BELL_2); 
}); 

...:

しかし、私は実際にやってみたいことは外側の文脈で機能onInterrupt(Pin pin)にアクセスするためにthisをキャプチャしてそのような何か、である

No matching function for call to wiringPiISR 

私はC++ - lambdaを使った経験はあまりありません。私は他の多くの言語のクロージャを知っていますが、明らかにC++では動作が異なるようです。このキャプチャはクロージャのシグネチャを変更するようですが、これを修正する方法はわかりませんし、 "実際の"関数を指さずに可能な解決策があるとしてもわかりません。

には、キャプチャ が存在しない場合

+0

私は 'onInterrupt'がメンバであると仮定します。したがって、 'this-> onInterrupt(...)'を試してみることをお勧めします。私は、コンパイラが明示的な 'this->'なしにコンパイルできなかったのと同様の動作を見てきました。 –

+0

いいえ、これは何も変わらない、私はすでにそれを試みた。エラーメッセージを正しく解釈すると、 'wiringPiISR'はそのクロージャを受け付けないようです。 – andreaspfurtscheller

+0

申し訳ありませんが、最初の読み取りで関数ポインタに気づいていませんでした。これは少し変化します(実際に答えを出すつもりです)。 –

答えて

関連する問題