On Saturday, 1 May 2021 at 04:55:10 UTC, frame wrote:
I always thought as long as an object implements an interface,
it should be able to cast it from a void* if it really points
to a supporting object.
No. An interface is like a pointer to a pointer. So to get to the
class, you have to go one more level of indirection.
```d
import std.stdio;
interface I {
void doIt();
}
class A : I {
void doIt() { writeln("Doing it"); }
}
void main()
{
I i = new A;
void** pi = cast(void**)i;
A a = cast(A)(*pi);
a.doIt();
}
```
If the runtime could not successfully cast it to AI, it should
return null. Am I wrong here?
That only works when you're casting one class/interface reference
to another. It doesn't work when you're casting raw pointers.