Thread overview |
---|
October 20, 2016 Typesafe variadic argument taking struct | ||||
---|---|---|---|---|
| ||||
Hello, why ... cannot be used with structs? struct Foo { this(int a) { } } void bar(Foo foo...) { } bar(42); |
October 21, 2016 Re: Typesafe variadic argument taking struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Satoshi | On 21/10/2016 1:48 AM, Satoshi wrote:
> Hello,
> why ... cannot be used with structs?
>
> struct Foo {
> this(int a) { }
> }
>
> void bar(Foo foo...) {
>
> }
>
> bar(42);
Because an int is not a Foo.
|
October 20, 2016 Re: Typesafe variadic argument taking struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to rikki cattermole | On Thursday, 20 October 2016 at 12:52:42 UTC, rikki cattermole wrote:
> On 21/10/2016 1:48 AM, Satoshi wrote:
>> Hello,
>> why ... cannot be used with structs?
>>
>> struct Foo {
>> this(int a) { }
>> }
>>
>> void bar(Foo foo...) {
>>
>> }
>>
>> bar(42);
>
> Because an int is not a Foo.
Oh, really? I didn't notice that... (sarcasm)
If I change struct Foo to class Foo it works.
|
October 20, 2016 Re: Typesafe variadic argument taking struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Satoshi | On Thursday, 20 October 2016 at 12:48:34 UTC, Satoshi wrote:
> Hello,
> why ... cannot be used with structs?
>
> struct Foo {
> this(int a) { }
> }
>
> void bar(Foo foo...) {
>
> }
>
> bar(42);
Being explicit about these things makes complex code more clear.
|
October 20, 2016 Re: Typesafe variadic argument taking struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Thursday, 20 October 2016 at 16:04:00 UTC, Nordlöw wrote: > On Thursday, 20 October 2016 at 12:48:34 UTC, Satoshi wrote: >> Hello, >> why ... cannot be used with structs? >> >> struct Foo { >> this(int a) { } >> } >> >> void bar(Foo foo...) { >> >> } >> >> bar(42); > > Being explicit about these things makes complex code more clear. With class it works fine. https://dlang.org/spec/function.html#typesafe_variadic_functions I have struct Point(x, y) and I want to let the people call some methods with Point or just pass x and y argument. I can make Point as a class but it's not efficient. I think this void moveMouseTo(float x, float y); is same clear as void moveMouseTo(Point point); |
October 20, 2016 Re: Typesafe variadic argument taking struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Satoshi | On Thursday, 20 October 2016 at 14:29:53 UTC, Satoshi wrote:
> Oh, really? I didn't notice that... (sarcasm)
>
> If I change struct Foo to class Foo it works.
It's because for some weird reason, this type of varargs allows implicit construction of an object. I don't know why, it's just a feature that was added a long time ago and never removed. However as you can see, it doesn't work for structs and IMO you should never use it.
|
Copyright © 1999-2021 by the D Language Foundation