Boost logo

Boost Users :

Subject: Re: [Boost-users] signals/slots and boost::functions
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2008-12-11 12:14:11


AMDG

david.weber_at_[hidden] wrote:
>> Ah. If you can somehow know what type slot holds, then it would work.
>> See http://www.boost.org/doc/html/function/faq.html#id2914032
>>
>>
>
>
> Hrm. I read it, and understand the reasons why, but then I read this:
> "The Signals library has a way around this."
>
> I was wondering if you had any insight, and could elaborate further, as
> this is functionality that would make our implementation significantly
> simpler. We do have a well-defined function prototype, and all the code
> is being written as we speak, so it's simple enough to enforce certain
> restrictions to gain the functionality (if possible)

You have to know what the real type of the slot is when
you call disconnect. Unless you are passing a single
type of function pointer, you can template the connect
and disconnect functions. Here's an extremely simplified example.

#include <boost/signal.hpp>
#include <boost/bind.hpp>
#include <iostream>

boost::signal<void()> sig;

template<class F>
void connect(F f) {
    sig.connect(f);
}

template<class F>
void disconnect(F f) {
    sig.disconnect(f);
}

struct printer {
    typedef void result_type;
    void operator()(int i) const {
        std::cout << i << std::endl;
    }
};

bool operator==(const printer&, const printer&) {
    return(true);
}

int main() {
    connect(boost::bind(printer(), 1));
    sig();
    disconnect(boost::bind(printer(), 1));
    sig();
}

In Christ,
Steven Watanabe


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