I've been writing some code and I have been experimenting with casting. I've found that sometimes only std.conv.to!
does the job over casting, and I am unsure why this is the case as I assumed that they are both the same.
I have the following interface:
interface ICustomDrawable {
void render(sfRenderWindow* renderWindow);
}
And the following class that implements that interface:
class Button : ICustomDrawable {
...
override void render(sfRenderWindow* renderWindow) {
...
}
}
And this class which uses ICustomDrawable
:
class StackLayout : ICustomDrawable {
...
void addChild(T)(T child) {
static assert(is(T : ICustomDrawable), "Invalid type T for child");
...
}
...
ICustomDrawable[] _children;
}
For some reason, when I want to cast the children
(property), only the second example works:
foreach (Button button; cast(Button[])(_boardSizeRow.children)) {
button.update(event, _renderWindow);
}
foreach (Button button; to!(Button[])(_boardSizeRow.children)) {
button.update(event, _renderWindow);
}
When I run the first code example I get a black screen, whilst with the second I do not. I find this very strange as when I write to the console the 'type', it is the same for both scenarios.
Help would be appreciated as to why this is happening so I can better understand how D works.