On Monday, 30 March 2015 at 02:53:36 UTC, Paul O'Neil wrote:
I'm registering a callback with some C code. The simplified story is here, but the actual code is on GitHub [1] at the end if you care.

The call looks something like this.

void register(void(*fp)(void*), void* context);

I have a class that holds state for the callback and registers itself:

final class Klass
{
    void method()
    {
        register(callback_function, &this);
    }
}

As of dmd 2.067, doing "&this" is deprecated. Is there an idiomatic way
to do this?

[0] Actual code is at
https://github.com/todayman/dubik/blob/master/source/vibe/core/drivers/rx.d#L177
. The msg object eventually gets passed to the registration function.

Thanks,

This is only deprecated for class not struct. This code below works fine:

---
import std.stdio;

extern(C) void f2(void* ins) {
    auto s = cast(S*)(ins);
    writefln("f2():%s", s);
    writefln("f2():%s", *s);
}

void f1(void* ins) {
    auto s = cast(S*)(ins);
    writefln("f1():%s", s);
    writefln("f1():%s", *s);
}

struct S { // <<-- change to "class" to get deprecated message
    int value = 10;
    void f() {
        f1(&this);
        f2(&this);
    }

}

void main()
{
    auto s = S();
    s.f();
}
---

bye,
lobo

Reply via email to