Subtyping with alias this

novice3 sorryno at em.ail
Mon Aug 17 14:29:47 UTC 2020


Hello.
I need subtype uint to store ipv4 address.
It should be like ordinary uint,
except conversion to string with %s format.

My try  https://run.dlang.io/is/fwTc0H  failed on last assert:

```
struct IpV4Address
{
   private uint ip;
   alias ip this;

   string toString()
   {
     import std.conv: to;
     return to!string((ip >>> 24) & 0xFF) ~ "." ~
            to!string((ip >>> 16) & 0xFF) ~ "." ~
            to!string((ip >>> 8) & 0xFF) ~ "." ~
            to!string(ip & 0xFF);
   }
}
void main()
{
   import std.format: format;
   IpV4Address x;
   x = 0x01020304;  // 1.2.3.4
   assert( x ==  0x01020304 );
   assert( format("%s", x) == "1.2.3.4" );
   assert( format("%x", x) == "01020304" );  // FAILED
   /+
std.format.FormatException@/dlang/dmd-nightly/linux/bin64/../../src/phobos/std/format.d(4065): Expected '%s' format specifier for type 'IpV4Address'
   +/
}
```

Is my goal (subtype should be normal uint, but with pretty 
to-string conversion) possible?

Thanks.


More information about the Digitalmars-d-learn mailing list