On 11/23/17 12:57 AM, Nicholas Wilson wrote:
On Wednesday, 22 November 2017 at 15:07:08 UTC, Tim Hsu wrote:
I am a C++ game developer and I want to give it a try.

It seems "this" in Dlang is a reference instead of pointer.

How can I pass it as void *?

void foo(void *);

class Pizza {
public:
    this() {
        Pizza newone = this;
        // works but newone is actually not this pizza.
        foo(&newone);
        // this does not work..
        foo(this);
    }
}

void main() {
    Pizza pizza = new Pizza();
    // this works...
    foo(&pizza);
}

Note that all the examples and advice in this thread apply to _classes_, not to structs.

A further way to look at it, a class is really not the same as what you normally think as references (either ref parameter in D or & type constructor in C++). It's really simply a pointer that cannot be used with pointer math.

ref parameters:
* cannot be rebound (you can't make it point at another value)
* don't act any differently than auto-storage variables. Making a copy does not make a new reference, but rather copies the whole thing.

class references:
* CAN be rebound.
* copying to another variable does not copy the data, ever (you can't make a variable that represents the class data)

-Steve

Reply via email to