Possible to pass a member function to spawn?

Artur Skawina art.08.09 at gmail.com
Tue Feb 7 15:55:27 PST 2012


On 02/08/12 00:32, Sean Kelly wrote:
> [...] the transitivity of shared can still make for some weirdness at the implementation level.  For example, if I have:
> 
> class Thread {
>     pthread_t p;
>     shared void detach() {
>         pthread_detach(p);
>     }
> }
> 
> Building this yields:
> 
> Error: function core.sys.posix.pthread.pthread_detach (_opaque_pthread_t*) is not callable using argument types (shared(_opaque_pthread_t*))
> Error: cannot implicitly convert expression (this.p) of type shared(_opaque_pthread_t*) to _opaque_pthread_t*
> 
> So I either need to speculatively update a bunch of system API calls to add a 'shared' qualifier to everything I think will always be used in a shared context, or explicitly cast away shared when actually passing these variables to their associated API routines.  Neither option is appealing, so again I haven't done anything regarding shared.

An overload would work, right?

class Thread {
    pthread_t p;
    shared void detach() {
        pthread_detach(p);
    }
    void detach() {
        pthread_detach(p);
    }
}

And, yes, without a class similar to inout, this is not really a solution.

artur


More information about the Digitalmars-d mailing list