Access template parameters at runtime

2012-08-10 Thread Henning Pohl
A struct is meant to take only integers as parameters: struct SomeStruct(intergers...) { int opIndex(size_t idx) /* ... */ { return integers[idx]; // Error ... } } alias SomeStruct!(1, 2, 3) ss; But it results in: Error: undefined identifier integers, did you mean tuple

Re: Access template parameters at runtime

2012-08-10 Thread Andrei Alexandrescu
On 8/10/12 9:55 AM, Henning Pohl wrote: A struct is meant to take only integers as parameters: struct SomeStruct(intergers...) { int opIndex(size_t idx) /* ... */ { return integers[idx]; // Error ... } } alias SomeStruct!(1, 2, 3) ss; But it results in: Error: undefined identifier integers,

Re: Access template parameters at runtime

2012-08-10 Thread Henning Pohl
On Friday, 10 August 2012 at 14:02:08 UTC, Andrei Alexandrescu wrote: On 8/10/12 9:55 AM, Henning Pohl wrote: A struct is meant to take only integers as parameters: struct SomeStruct(intergers...) { int opIndex(size_t idx) /* ... */ { return integers[idx]; // Error ... } } alias

Re: Access template parameters at runtime

2012-08-10 Thread Vladimir Panteleev
On Friday, 10 August 2012 at 14:05:16 UTC, Henning Pohl wrote: Oups, sorry, imagine there isn't one. So the error is: variable idx cannot be read at compile time. You can't index a tuple during compilation. You need to use an array: struct SomeStruct(alias integers) { int

Re: Access template parameters at runtime

2012-08-10 Thread Vladimir Panteleev
On Friday, 10 August 2012 at 14:10:02 UTC, Vladimir Panteleev wrote: On Friday, 10 August 2012 at 14:05:16 UTC, Henning Pohl wrote: Oups, sorry, imagine there isn't one. So the error is: variable idx cannot be read at compile time. You can't index a tuple during compilation. Sorry, meant

Re: Access template parameters at runtime

2012-08-10 Thread Henning Pohl
On Friday, 10 August 2012 at 14:10:38 UTC, Vladimir Panteleev wrote: On Friday, 10 August 2012 at 14:10:02 UTC, Vladimir Panteleev wrote: On Friday, 10 August 2012 at 14:05:16 UTC, Henning Pohl wrote: Oups, sorry, imagine there isn't one. So the error is: variable idx cannot be read at

Re: Access template parameters at runtime

2012-08-10 Thread Christophe Travert
Henning Pohl , dans le message (digitalmars.D:174569), a écrit : On Friday, 10 August 2012 at 14:10:38 UTC, Vladimir Panteleev wrote: On Friday, 10 August 2012 at 14:10:02 UTC, Vladimir Panteleev wrote: On Friday, 10 August 2012 at 14:05:16 UTC, Henning Pohl wrote: Oups, sorry, imagine

Re: Access template parameters at runtime

2012-08-10 Thread Henning Pohl
On Friday, 10 August 2012 at 14:35:29 UTC, trav...@phare.normalesup.org (Christophe Travert) wrote: Henning Pohl , dans le message (digitalmars.D:174569), a écrit : On Friday, 10 August 2012 at 14:10:38 UTC, Vladimir Panteleev wrote: On Friday, 10 August 2012 at 14:10:02 UTC, Vladimir

Re: Access template parameters at runtime

2012-08-10 Thread David Nadlinger
On Friday, 10 August 2012 at 14:42:24 UTC, Henning Pohl wrote: That is what I was trying first, but I could not make it work. Maybe you can show me how it's done? Just use the compiler tuple inside an array literal, like this: [integers]. It will auto-expand, just when passing it to a method.

Re: Access template parameters at runtime

2012-08-10 Thread jerro
Note that if your design makes that you must have a tuple, you may build the array at compile time, so that you can index it at run time. That is what I was trying first, but I could not make it work. Maybe you can show me how it's done? This would be one way to do it: auto

Re: Access template parameters at runtime

2012-08-10 Thread Christophe Travert
Henning Pohl , dans le message (digitalmars.D:174572), a écrit : That is what I was trying first, but I could not make it work. Maybe you can show me how it's done? For example: import std.stdio; template TupleToArray(T...) { static if (T.length == 1) { enum TupleToArray = [T[0]];

Re: Access template parameters at runtime

2012-08-10 Thread David Nadlinger
On Friday, 10 August 2012 at 15:26:51 UTC, David Nadlinger wrote: It will auto-expand, just when passing it to a method. Darn, that should have been: »just like when …« David

Re: Access template parameters at runtime

2012-08-10 Thread Henning Pohl
Great, thank you :] The solution provided by David seems to be shortest. You can even pass the ints directly.

Re: Access template parameters at runtime

2012-08-10 Thread Denis Shelomovskij
10.08.2012 19:26, David Nadlinger пишет: Just use the compiler tuple inside an array literal, like this: [integers]. It will auto-expand, just when passing it to a method. And if it's impossible/undesirable to create an array, you can do this: --- foreach(i, t; your_tuple) if(i == idx)

Re: Access template parameters at runtime

2012-08-10 Thread Andrej Mitrovic
On 8/10/12, jerro a...@a.com wrote: This would be one way to do it: On 8/10/12, Christophe Travert trav...@phare.normalesup.org wrote: For example: Guys I think you're overcomplecating it, you can just do: struct SomeStruct(integers...) { enum ints = [integers]; int opIndex(size_t

Re: Access template parameters at runtime

2012-08-10 Thread Dmitry Olshansky
On 11-Aug-12 00:58, Andrej Mitrovic wrote: On 8/10/12, jerro a...@a.com wrote: This would be one way to do it: On 8/10/12, Christophe Travert trav...@phare.normalesup.org wrote: For example: Guys I think you're overcomplecating it, you can just do: struct SomeStruct(integers...) {

Re: Access template parameters at runtime

2012-08-10 Thread Andrej Mitrovic
On 8/10/12, Dmitry Olshansky dmitry.o...@gmail.com wrote: Internally identical to: int opIndex(size_t idx) { return [integers][idx]; } Allocates on every call or not? I've no idea maybe Kenji fixed this already. t's easy to check, add writeln(ints[idx]); in opIndex and index [0]

Re: Access template parameters at runtime

2012-08-10 Thread Timon Gehr
On 08/10/2012 11:09 PM, Dmitry Olshansky wrote: On 11-Aug-12 00:58, Andrej Mitrovic wrote: On 8/10/12, jerro a...@a.com wrote: This would be one way to do it: On 8/10/12, Christophe Travert trav...@phare.normalesup.org wrote: For example: Guys I think you're overcomplecating it, you can