これはかなり珍しい問題ですが、それでも問題です。ラムダをパラメーターとして受け取り、それをに渡す関数がありますQObject::connect
。
template<typename Functor>
void MyClass::doSomething(Functor f)
{
connect(network_reply, &QNetworkReply::finished, f);
//...
}
の呼び出し例は次のMyClass::doSomething
ようになります。
doSomething([]()
{
// how do I get access to the sender???
});
私のコメントからわかるように、シグナルを発したQObject::sender
へのポインターを取得するためにアクセスする方法はありません。QObject
シグナルを発行するクラスは、ラムダが作成されているスコープ内にないため、ラムダ内で参照する方法はありません。
どのようなオプションがありますか?
編集: Andy の提案 ( std::bind
) を使用してみましたが、ほとんど理解できないテンプレート エラーの 1 つが発生します。
http://paste.ubuntu.com/1614425/
抜粋:
decltype はオーバーロードされた関数のアドレスを解決できません
...そしてそれは呼び出しを指していQObject::connect
ます。