Facing problems with Class Properties
spir
denis.spir at gmail.com
Fri Dec 10 23:51:21 PST 2010
On Sat, 11 Dec 2010 06:11:43 +0530
d coder <dlang.coder at gmail.com> wrote:
> > if(false) {
> > for (size_t j = 0; j < f.length...)
> > ...
> > }
> >
> > Semantically this code is wrong as you can't take the length of f which is class Bar. The static if forces the compiler to not generate this code as it is known to be false.
> >
>
> Thanks Jesse
>
> What you are saying makes sense to me. The problem is that the
> following code works perfectly. I have just commented out some part
> and replaced it with some debug statements.
>
> The output from this code makes me believe that "is" and "typeof" do
> have some run-time semantics. Or is it a D2 bug. BTW I am using
> Digital Mars D Compiler v2.050.
>
> Regards
> - Puneet
>
> import std.stdio;
> class BaseClass { }
>
> class Bar: BaseClass { }
>
> class Foo: BaseClass {
> this() {
> foreach(i, f; this.tupleof) {
> if (is (typeof(this.tupleof[i]) : BaseClass[])) {
> writeln("Creating new objects for all ARRAY types ", this.tupleof[i].stringof);
> // for (size_t j = 0; j < this.tupleof[i].length; ++j) {
> // this.tupleof[i][j] = new typeof(this.tupleof[i][j]) ();
> // }
> }
> if (is(typeof(this.tupleof[i]) : BaseClass)) {
> writeln("Creating new objects for all NON-ARRAY types ",
> this.tupleof[i].stringof);
> // this.tupleof[i] = new typeof(this.tupleof[i]) ();
> }
> }
> }
> Bar instance1;
> Bar instance2;
> Bar [10] instances;
> }
>
> unittest {
> Foo foo;
> foo = new Foo;
> }
>
> // I am getting the following output
> // Creating new objects for all NON-ARRAY types this.instance1
> // Creating new objects for all NON-ARRAY types this.instance2
> // Creating new objects for all ARRAY types this.instances
Hello "d coder",
Maybe this is wrong and stupid, but I have faced several times similar cases ; meaning cases whare I perfectly knew (and D as well should have known ;-) that a given thing was of given type, but could not access its slots.
Try and downcast 'this.tupeof[i]' to the type that has a 'length'; if I'm right, you're done. (I find this wrong, buggy, & ugly, but well...) Else, sorry for the noise.
Denis
-- -- -- -- -- -- --
vit esse estrany ☣
spir.wikidot.com
More information about the Digitalmars-d-learn
mailing list