Boost logo

Boost :

Subject: Re: [boost] Synapse library review starts today December 2
From: Klemens Morgenstern (klemens.morgenstern_at_[hidden])
Date: 2016-12-04 07:09:16


Am 04.12.2016 um 11:45 schrieb Emil Dotchevski:
> On Sat, Dec 3, 2016 at 10:07 AM, Klemens Morgenstern <
> klemens.morgenstern_at_[hidden]> wrote:
>
>> Am 03.12.2016 um 18:56 schrieb Peter Dimov:
>>
>>> Klemens Morgenstern wrote:
>>>
>>> But really having a void* as part of a public interface would've given
>>>> you a no, even if everything else was perfect with this library.
>>>>
>>> This objection of yours doesn't make much sense to me. What problem are
>>> you trying to prevent? Objects of different types don't typically share the
>>> same address, so type safety can hardly be violated. Well, I suppose you
>>> could use the wrong member of a union by mistake.
>>>
>> Or a boost.variant.
>
> In Synapse, emitters are identified by their address, so union members
> represent the same emitter, by definition. Even if somehow the type of the
> emitter participated in its identifier, you'd have the same problem in case
> of union members of the same type.
>
>
>> Or you could just by coincidence have a new object at the address of an
>> old one, long after it has been deleted - which is actually easy to do,
>> since you can put the objects that emit on the stack.
>
> Use shared_ptr with null deleter and weak_ptr to avoid that. See "Emitter
> lifetime safety" in http://zajo.github.io/boost-synapse/Tutorial.html.

Alright, tell me if this code works properly.

class
my_button
     {
     ....
     void
     emit_button_clicked()
         {
         synapse::emit<button_clicked>(this);
         }
     };

//...
boost::shared_ptr<synapse::connection> c;
{
     my_button b;
     c=synapse::connect<button_clicked>(&b,f);
    synapse::emit<button_clicked>(&b); //should work properly
}
{
    int i = 42;
    synapse::emit<button_clicked>(&i); //yeah, not a good idea
}

And this can be caught at compile-time.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk