On Fri, Oct 31, 2008 at 11:57 AM, bearophile <[EMAIL PROTECTED]> wrote:
> This is a question regarding templates. Let's say I have a simple struct 
> template that is specified by an integer:
>
> struct S(int N) {
>    int[N] a;
> }
>
> Now I'd like to write a function that takes a S, and for example prints the 
> integers of S.a
> separated by a space (I don't care of the extra space at the end).
>
> This is easy to to in Haskell because it has type classes, but it's less easy 
> to do in D (I don't know if type classes can be introduced into the D type 
> system):
> http://en.wikipedia.org/wiki/Type_class
>
> This is a simple solution, but it compiles only if N == 2, so I'd like 
> something more general:
>
> void printS1(S!(2) s) {
>    foreach (el; s.a)
>        put(el, " ");
>    putr();
> }
>
> This is general, a function template, but it requires you to specify N:
>
> void printS2(int N)(S!(N) s) {
>    foreach (el; s.a)
>        put(el, " ");
>    putr();
> }
>
> You have to call it for example like this:
> printS2!(s.a.length)(s);
>

I think this one should work.  IFTI should be able to tease apart S to
match the int.  If it doesn't work, it seems like a bug to me.
Actually I seem to remember a bug like this in the DB, but I couldn't
find it just now.  I was also thinking it was marked fixed.

--bb

Reply via email to