Is there a cleaner way of doing this?
Timon Gehr via Digitalmars-d
digitalmars-d at puremagic.com
Tue Aug 8 02:03:28 PDT 2017
On 08.08.2017 08:06, Shachar Shemesh wrote:
> On 07/08/17 12:37, Timon Gehr wrote:
>
>> struct S(T...) {
>> T param;
>>
>> void initialize(T param) {
>> this.param = param;
>> // Other stuff
>> }
>> }
>>
>> Then, use S!() instead of S!void.
>>
>
> It's an interesting approach. It has the down side that it also accepts
> S!(int, string, int[23], double), and I'm still not sure what I think
> about this option (i.e. - whether I want to allow it).
>
> If not, then things start to look quite misleading to the user, and I'd
> rather have the ugly static-ifs than do that.
>
> Shachar
I don't see why not, but you can just add a template constraint:
struct S(T...) if(T.length<=1) { ... }
You can also hide the approach as an implementation detail:
struct S(T){
static if(is(T==void)){
private alias X = AliasSeq!();
}else{
private alias X = AliasSeq!T;
}
X param;
void initialize(X param){
this.param=param;
// ...
}
}
More information about the Digitalmars-d
mailing list