need `this` for `this` of type `ref @safe Test(string reg_arg)
Paul Backus
snarwin at gmail.com
Sun Jun 18 18:17:16 UTC 2023
On Sunday, 18 June 2023 at 17:43:01 UTC, rempas wrote:
> Ok, so I'm having a struct that has a constructor that takes a
> template parameter. I suppose this question could also be named
> `how to initialize constructors with template parameters` but
> whatever! The funny thing is, I think that I may have already
> found how to do it in the past but I forgot... This time, I'm
> going to add the code in a big module in my project so I'm not
> going to have it as a reference and I won't forget it.
>
> Here is a small sample code:
>
> ```d
> import std.stdio;
>
> struct Test {
> this(string type = "def")(string reg_arg) {
> writeln("reg_arg: ", reg_arg);
> }
> }
>
> void main() {
> auto test = Test.__ctor!("non_def")("Hello");
> }
> ```
>
> And the error I get: `test.d(10): Error: need `this` for `this`
> of type `ref @safe Test(string reg_arg)`
`__ctor` doesn't create a new object, it initializes an existing
object. You need to create the object first, then call `__ctor`
on it:
```d
void main() {
Test test;
test.__ctor!("non_def")("Hello");
}
```
More information about the Digitalmars-d-learn
mailing list