D - problem with templates?
- Ivan Senji (58/58) Jan 26 2004 I am starting to like D templates but i have more problems!
I am starting to like D templates but i have more problems! I have a class set: class set(A) { this(){} bool insert(A a) { version(test){printf("About to insert %d",a);} if(!(a in skup)) { skup[a]=1; version(test){printf("inserting\n");} } else { version(test){printf("exists\n");} } return true; } template Print(A) { int PrintSetSize(set!(A) a) { printf("\size iz %d",a.size()); } } A[] Values(){return skup.keys;} int size(){return skup.length;} int[A] skup; } alias set!(int) IntegerSet; And when i want to use it: IntegerSet integers = new IntegerSet(); IntegerSet integers2 = new IntegerSet(); integers.insert(5); integers.insert(3); integers.insert(5); assert(integeri.size==2); integers2.insert(5); integers2.insert(3); //all this works but when i add the following line the compiler crashes: integers.Print!(int).PrintSetSize(integers2); also crashes with IntegerSet.Print!(int).PrintSetSize(integers2); So maybe i am doing something wrong?? The question is how to declare a member template function and how to use it? How to pass to a member function an object of its own template type! I would also like to be able to use the set class this way: if(integrs2 == integers){...} How can i do this? I know i cant declare operators(opEquals?) outside the class and if i want to declare it inside the class it has to be non-static (to be able to use acces first operand using this) and D template member function can only be static?? I hope there is a way around this problem? I think that operators should be allowed to be outside the class and that the template member function should be allowed to be non-static!
Jan 26 2004