Boost logo

Boost Users :

Subject: Re: [Boost-users] [Signals2] Signal disconnect wrapper won't work
From: Marc DelaCruz (mdelacruz_at_[hidden])
Date: 2009-07-07 11:02:09


So I guess the 'best' workaround would be to do something like below?

template<typename T>
void disconnect (void (T::*pMemFunc)(void), T& rObj, VoidSignal& rSig)
{
    rSig.disconnect(VoidSlot(pMemFunc, rObj));
}

Thanks for the help.

-----Original Message-----
From: boost-users-bounces_at_[hidden]
[mailto:boost-users-bounces_at_[hidden]]On Behalf Of Steven Watanabe
Sent: Tuesday, July 07, 2009 9:42 AM
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] [Signals2] Signal disconnect wrapper won't
work

AMDG

Marc dela Cruz wrote:
> Hopefully this is not another simple oversight on my part but I have code
like below and the disconnect wrapper does not work.
>
> Thanks.
>
> typedef boost::signals2::signal<void ()> VoidSignal;
> typedef VoidSignal::slot_type VoidSlot;
> class x{
> public:
> void somefuncA()
> {
> cerr << "Bada bing" << endl;
> }
> void somefuncB()
> {
> cerr << "Bada boom " << endl;
> }
> };
>
>
> void disconnect(VoidSlot const& rF, VoidSignal& rSig)
> {
> rSig.disconnect(rF); //won't compile
> //rSig.disconnect(&rF); //compiles but doesn't disconnect
> }
>
>
> int main()
> {
> x myX;
> VoidSignal sig;
> sig.connect(VoidSlot(&x::somefuncB, &myX));
> disconnect(VoidSlot(&x::somefuncB, &myX, sig); //doesn't work/compile
as expected
> disconnect(boost::bind(&x::somefuncB, &myX, sig); //doesn't
work/compile either
> sig(); // will still invoke somefuncB
> return 0;
> }
>

Ignoring all the minor syntax errors, my guess is that
the basic problem is
http://www.boost.org/doc/html/function/faq.html#id1877737

In Christ,
Steven Watanabe

_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net