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;
        // ...
    }
}

Reply via email to