Robert, for someone who has only vague knowledge of signal stuff (me), can you explain why exactly this design was necessary? (mixing in global variable and wrapper function which returns its restricted version) Is the desire to separate protection attributes the only motivation or there are some other concerns?

No this is the only reason. Usually it is the common case that you only want the "owner" of the signal to emit it. Without the mixin, this would require the following boilerplate for every single signal:

ref RestrictedSignal!(SomeTemplate!int) mysig() { return _mysig;}
    private Signal!(SomeTemplate!int) _mysig;

which is a bit tedious.

I am currently considering the suggestions of Jacob Carlborg:
 - using an enum for the protections
- provide an additional template mixin wrapper for another minor reduction of boilerplate.

Signal slot frameworks in C++ usually either only allow the owner to emit the signal (Qt) or you are required to write some wrapper functions for restrictions on the public API (e.g. boost signal).

Best regards,

Robert


Reply via email to