Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
October 02, 2012 Setting defaults to variadic template args | ||||
---|---|---|---|---|
| ||||
Attachments:
| Is it possible? Eg: struct Event(T... = (int, float)) { void F(T...); // <- should default to F(int, float) } Does anyone have any clever tricks that will work in this scenario? Some magic tuple syntax? |
October 02, 2012 Re: Setting defaults to variadic template args | ||||
---|---|---|---|---|
| ||||
Posted in reply to Manu | On 2012-10-02 15:15, Manu wrote: > Is it possible? > > Eg: > struct Event(T... = (int, float)) > { > void F(T...); // <- should default to F(int, float) > } > > Does anyone have any clever tricks that will work in this scenario? Some > magic tuple syntax? struct Event { static if (T.length == 0) void F(int, float); else void F(T); } Perhaps? -- /Jacob Carlborg |
October 02, 2012 Re: Setting defaults to variadic template args | ||||
---|---|---|---|---|
| ||||
Posted in reply to Manu |
module program;
import std.stdio;
import std.traits;
import std.typetuple;
struct Event (T...) {
alias EraseAll!(void, TypeTuple!(T,
Select!(T.length < 1, int, void),
Select!(T.length < 2, float, void),
)) T2;
void F (T2 args) {
writeln(typeid(typeof(args)));
}
}
void main () {
Event!() e1;
e1.F(5, 6);
}
On Tuesday, 2 October 2012 at 13:15:08 UTC, Manu wrote:
> Is it possible?
>
> Eg:
> struct Event(T... = (int, float))
> {
> void F(T...); // <- should default to F(int, float)
> }
>
> Does anyone have any clever tricks that will work in this scenario? Some
> magic tuple syntax?
|
October 02, 2012 Re: Setting defaults to variadic template args | ||||
---|---|---|---|---|
| ||||
Posted in reply to luka8088 | Or maybe... This seems like a much better solution:
module program;
import std.stdio;
import std.traits;
import std.typetuple;
template SelectTrue (bool condition, T) {
static if (condition)
alias T SelectTrue;
}
struct Event (T...) {
alias TypeTuple!(T,
SelectTrue!(T.length < 1, int),
SelectTrue!(T.length < 2, float),
) T2;
void F (T2 args) {
writeln(typeid(typeof(args)));
}
}
void main () {
Event!() e1;
e1.F(5, 6);
}
On Tuesday, 2 October 2012 at 13:44:10 UTC, luka8088 wrote:
>
> module program;
>
> import std.stdio;
> import std.traits;
> import std.typetuple;
>
> struct Event (T...) {
>
> alias EraseAll!(void, TypeTuple!(T,
> Select!(T.length < 1, int, void),
> Select!(T.length < 2, float, void),
> )) T2;
>
> void F (T2 args) {
> writeln(typeid(typeof(args)));
> }
>
> }
>
> void main () {
>
> Event!() e1;
>
> e1.F(5, 6);
>
> }
>
>
> On Tuesday, 2 October 2012 at 13:15:08 UTC, Manu wrote:
>> Is it possible?
>>
>> Eg:
>> struct Event(T... = (int, float))
>> {
>> void F(T...); // <- should default to F(int, float)
>> }
>>
>> Does anyone have any clever tricks that will work in this scenario? Some
>> magic tuple syntax?
|
October 02, 2012 Re: Setting defaults to variadic template args | ||||
---|---|---|---|---|
| ||||
Posted in reply to luka8088 | And the simplest solution wins:
module program;
import std.stdio;
import std.traits;
import std.typetuple;
struct Event (T1 = int, T2 = float, Telse...) {
alias TypeTuple!(T1, T2, Telse) T;
void F (T args) {
writeln(typeid(typeof(args)));
}
}
void main () {
Event!() e1;
e1.F(5, 6);
}
I hope that you found the solution that you where looking for.
On Tuesday, 2 October 2012 at 13:49:56 UTC, luka8088 wrote:
> Or maybe... This seems like a much better solution:
>
>
> module program;
>
> import std.stdio;
> import std.traits;
> import std.typetuple;
>
> template SelectTrue (bool condition, T) {
> static if (condition)
> alias T SelectTrue;
> }
>
> struct Event (T...) {
>
> alias TypeTuple!(T,
> SelectTrue!(T.length < 1, int),
> SelectTrue!(T.length < 2, float),
> ) T2;
>
> void F (T2 args) {
> writeln(typeid(typeof(args)));
> }
>
> }
>
> void main () {
>
> Event!() e1;
>
> e1.F(5, 6);
>
> }
>
>
>
> On Tuesday, 2 October 2012 at 13:44:10 UTC, luka8088 wrote:
>>
>> module program;
>>
>> import std.stdio;
>> import std.traits;
>> import std.typetuple;
>>
>> struct Event (T...) {
>>
>> alias EraseAll!(void, TypeTuple!(T,
>> Select!(T.length < 1, int, void),
>> Select!(T.length < 2, float, void),
>> )) T2;
>>
>> void F (T2 args) {
>> writeln(typeid(typeof(args)));
>> }
>>
>> }
>>
>> void main () {
>>
>> Event!() e1;
>>
>> e1.F(5, 6);
>>
>> }
>>
>>
>> On Tuesday, 2 October 2012 at 13:15:08 UTC, Manu wrote:
>>> Is it possible?
>>>
>>> Eg:
>>> struct Event(T... = (int, float))
>>> {
>>> void F(T...); // <- should default to F(int, float)
>>> }
>>>
>>> Does anyone have any clever tricks that will work in this scenario? Some
>>> magic tuple syntax?
|
October 02, 2012 Re: Setting defaults to variadic template args | ||||
---|---|---|---|---|
| ||||
Posted in reply to Manu | On 10/02/2012 03:15 PM, Manu wrote:
> struct Event(T... = (int, float))
> {
> void F(T...); // <- should default to F(int, float)
> }
template Event(){alias Event!(int,float) Event;}
struct Event(T...){
void F(T...);
}
|
Copyright © 1999-2021 by the D Language Foundation