equivalent of C++ implicit constructors and conversion operators

Philippe Sigaud philippe.sigaud at gmail.com
Fri Apr 23 14:00:55 PDT 2010


On Fri, Apr 23, 2010 at 18:46, Robert Clipsham <robert at octarineparrot.com>wrote:

> On 23/04/10 17:22, #ponce wrote:
>
>> In C++ implicit constructors and conversion operators allow a user-defined
>> type to act quite like a builtin-type.
>>
>>   struct half
>>   {
>>       half(float x);l
>>       inline operator float() const;
>>   }
>>
>> allows to write:
>>
>>   half x = 1.f;
>>   float f = x;
>>
>> and this is especially useful for templates.
>> I couldn't find a similar construct in D, is there any?
>>
>
> A combination of alias this and opAssign should work:
> ----
> struct half
> {
>  float f;
>  alias f this;
>  half opAssign(float fl)
>  {
>    f = fl;
>    return this;
>  }
> }
>
> void main()
> {
>  half x;
>  // For some reason I got a compilation error with half x = 1f;
>  x = 1f;
>  float f = x;
> }
>

Could the compilation error comes from the compiler rewriting half f = 1f;
into half f(1f); or somesuch and trying to call a constructor?
I'm tearing my hair due to errors/confusions between constructors and opCall
for structs.

Anyway, in your example, adding

this(float f) { this.f = f;}

is enough to get half f = 1f; to compile.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20100423/71db15cc/attachment.html>


More information about the Digitalmars-d-learn mailing list