std::bind を使用して、クラス メンバー関数を含むラムダを作成しましたが、boost::signals2 はそれを受け入れません。
を呼び出してCut
、新しいものがある場合に通知したいクラスがあります。Event
void Cut::newEvent(Event& e)
Cut のインスタンスへのラムダ バインディングを作成しましたが、Event を渡すと期待どおりに動作します。(コードはコンパイルされ、出力は「Registered new event」です。)
ただし、このラムダをインスタンスに接続しようとするboost::signals2::signal<void(Event&)>
と、次のメッセージが表示されます。
error: 'f' cannot be used as a function
main() の関数として使用できるため、これは奇妙です。std::function<void(Event&)>
( auto の代わりに使用しても同じ結果が得られます。
これを機能させることは可能ですか?現在機能していないのはなぜですか?
これは関連するコードです:
#include <iostream>
#include <boost/signals2.hpp>
//Dummy event class
struct Event
{ int val; };
typedef boost::signals2::signal<void (Event&) >
EventBroadcaster;
//Class I want to notified of new events
class Cut
{
public:
void newEvent( Event& e)
{
std::cout << "Registered new event" << std::endl;
fResult = true;
}
bool check() const
{ return fResult; }
private:
bool fResult;
};
int main()
{
Cut c{};
//Lambda to call newEvent on c
auto f =
std::bind( &Cut::newEvent, &c,
std::placeholders::_1) ;
Event e{};
f(e); //works
EventBroadcaster eb;
eb.connect(&f); //doesn't work
}