On Wednesday, 21 February 2018 at 14:11:10 UTC, ParticlePeter wrote:
struct Foo(T) {
  T bar;
  this(S)(S s) {
    bar = convert(s);
  }
}

auto foo = Foo!int(some_float);


this works because S is deduced as typeof(some_float), but how would I instantiate the struct without relying on auto deduction?

Suppose we would have this kind of constructor where auto deduction is not possible:

  this(int n)(float f) {
    static foreach( i; 0..n) { do_some_ctfe_magic;}
  }

How to instantiate Foo then?

No can do. The solution is to use a factory function:

struct Foo(T) {
    static Foo create(int n)(float f) {
        Foo result;
        static foreach( i; 0..n) { do_some_ctfe_magic;}
        return result;
    }
}

--
  Simen

Reply via email to