How to instantiate a template struct with a template constructor without relying on auto deduction?
Simen Kjærås
simen.kjaras at gmail.com
Wed Feb 21 14:29:31 UTC 2018
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
More information about the Digitalmars-d-learn
mailing list