On 08/08/2017 05:03 AM, Timon Gehr wrote:
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;
         // ...
     }
}

Very good creative use of the language, kudos Timon. -- Andrei

Reply via email to