Thread overview | ||||||
---|---|---|---|---|---|---|
|
November 20, 2012 Array literal template parameter? | ||||
---|---|---|---|---|
| ||||
I need to pass an array literal as a template parameter. The reference on this website seems to imply this is possible, but doesn't illustrate it. The obvious way doesn't seem to work: mixin template MyTemplate(int[] arr) {} Error: arithmetic/string type expected for value-parameter, not int[] Is there no way to do this without using a mixin and CTFE? I don't think I can use tuple types because I need to initialize a struct member using the array literal parameter. |
November 20, 2012 Re: Array literal template parameter? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Maxime Chevalier | On 11/21/2012 12:22 AM, Maxime Chevalier wrote:
> I need to pass an array literal as a template parameter. The reference
> on this website seems to imply this is possible, but doesn't illustrate
> it. The obvious way doesn't seem to work:
>
> mixin template MyTemplate(int[] arr) {}
> Error: arithmetic/string type expected for value-parameter, not int[]
>
> Is there no way to do this without using a mixin and CTFE? I don't think
> I can use tuple types because I need to initialize a struct member using
> the array literal parameter.
I guess it should work, and this is a compiler bug. You can work around the limitation by using a template alias parameter.
|
November 21, 2012 Re: Array literal template parameter? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Maxime Chevalier | Maxime Chevalier:
> I need to pass an array literal as a template parameter. The reference on this website seems to imply this is possible, but doesn't illustrate it. The obvious way doesn't seem to work:
It's a known compiler bug, already in Bugzilla.
In the meantime this is a workaround:
template Foo(Args...) if (Args.length == 1) {
pragma(msg, Args[0]);
enum Foo = Args;
}
void main() {
enum double[] a = [10, 20, 30];
auto x = Foo!a;
}
Bye,
bearophile
|
November 21, 2012 Re: Array literal template parameter? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Maxime Chevalier | On 2012-11-21 00:22, Maxime Chevalier wrote: > I need to pass an array literal as a template parameter. The reference > on this website seems to imply this is possible, but doesn't illustrate > it. The obvious way doesn't seem to work: > > mixin template MyTemplate(int[] arr) {} > Error: arithmetic/string type expected for value-parameter, not int[] > > Is there no way to do this without using a mixin and CTFE? I don't think > I can use tuple types because I need to initialize a struct member using > the array literal parameter. It seems an "alias" parameter is working: mixin template MyTemplate(alias arr) {} You might want to add some kind of template constraint on that. -- /Jacob Carlborg |
Copyright © 1999-2021 by the D Language Foundation