Thread overview |
---|
August 30, 2016 Template not seeming to instantiate a second time with default alias parameter | ||||
---|---|---|---|---|
| ||||
Hi, Code here: https://gist.github.com/grogancolin/066a8a8c105fa473dfee961e2481a30e Basically, it seems when a template has an alias parameter like class Node(T, alias func = (T t => t*t))(){ //whatever } //instantiate Node!(int) intNode; Node!(float) floatNode; // fails as lambda func expects an int. Am I doing something wrong or is this a bug? |
August 30, 2016 Re: Template not seeming to instantiate a second time with default alias parameter | ||||
---|---|---|---|---|
| ||||
Posted in reply to wobbles | On 08/30/2016 10:41 PM, wobbles wrote: > class Node(T, alias func = (T t => t*t))(){ > //whatever > } > > //instantiate > Node!(int) intNode; > Node!(float) floatNode; // fails as lambda func expects an int. > > Am I doing something wrong or is this a bug? Proper test case: ---- class Node(T, alias func = (T t) => t*t) { void method() { func(T.init); } } //instantiate Node!(int) intNode; Node!(float) floatNode; // fails as lambda func expects an int. ---- Looks like a bug to me. Similar to this: https://issues.dlang.org/show_bug.cgi?id=14501 |
August 30, 2016 Re: Template not seeming to instantiate a second time with default alias parameter | ||||
---|---|---|---|---|
| ||||
Posted in reply to ag0aep6g | On Tuesday, 30 August 2016 at 20:55:20 UTC, ag0aep6g wrote:
> On 08/30/2016 10:41 PM, wobbles wrote:
>> class Node(T, alias func = (T t => t*t))(){
>> //whatever
>> }
>>
>> //instantiate
>> Node!(int) intNode;
>> Node!(float) floatNode; // fails as lambda func expects an int.
>>
>> Am I doing something wrong or is this a bug?
>
> Proper test case:
>
> ----
> class Node(T, alias func = (T t) => t*t)
> {
> void method() { func(T.init); }
> }
>
> //instantiate
> Node!(int) intNode;
> Node!(float) floatNode; // fails as lambda func expects an int.
> ----
>
> Looks like a bug to me. Similar to this:
> https://issues.dlang.org/show_bug.cgi?id=14501
Yeah. Looks related.
I'll have to try find a workaround for now :/
|
August 30, 2016 Re: Template not seeming to instantiate a second time with default alias parameter | ||||
---|---|---|---|---|
| ||||
Posted in reply to wobbles | On 08/30/2016 11:28 PM, wobbles wrote:
> I'll have to try find a workaround for now :/
This seems to work and isn't too ugly:
----
class Node(T, alias func) {/*...*/}
alias Node(T) = Node!(T, (T t) => t*t);
----
|
August 30, 2016 Re: Template not seeming to instantiate a second time with default alias parameter | ||||
---|---|---|---|---|
| ||||
Posted in reply to wobbles | On 08/30/2016 11:28 PM, wobbles wrote:
> I'll have to try find a workaround for now :/
This also seems to work, but has a slightly different meaning:
----
class Node(T, alias func = t => t*t) {/* ... */}
----
The default func is a template here. Equivalent to this:
----
auto square(T)(T t) { return t*t; }
class Node(T, alias func = square) {/* ... */}
----
|
August 31, 2016 Re: Template not seeming to instantiate a second time with default alias parameter | ||||
---|---|---|---|---|
| ||||
Posted in reply to ag0aep6g | On Tuesday, 30 August 2016 at 21:35:29 UTC, ag0aep6g wrote:
> On 08/30/2016 11:28 PM, wobbles wrote:
>> I'll have to try find a workaround for now :/
>
> This seems to work and isn't too ugly:
>
> ----
> class Node(T, alias func) {/*...*/}
> alias Node(T) = Node!(T, (T t) => t*t);
> ----
Excellent - thanks for these.
This one will work for me :)
I was going to do something messy with a nested template and some static ifs. But, complicated things are complicated. This is much easier.
Thanks!
|
Copyright © 1999-2021 by the D Language Foundation