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++では動作が異なるようです。このキャプチャはクロージャのシグネチャを変更するようですが、これを修正する方法はわかりませんし、 "実際の"関数を指さずに可能な解決策があるとしてもわかりません。
には、キャプチャ が存在しない場合
私は 'onInterrupt'がメンバであると仮定します。したがって、 'this-> onInterrupt(...)'を試してみることをお勧めします。私は、コンパイラが明示的な 'this->'なしにコンパイルできなかったのと同様の動作を見てきました。 –
いいえ、これは何も変わらない、私はすでにそれを試みた。エラーメッセージを正しく解釈すると、 'wiringPiISR'はそのクロージャを受け付けないようです。 – andreaspfurtscheller
申し訳ありませんが、最初の読み取りで関数ポインタに気づいていませんでした。これは少し変化します(実際に答えを出すつもりです)。 –