dChar Error

Salih Dincer salihdb at hotmail.com
Sat Dec 31 06:57:57 UTC 2022


On Saturday, 31 December 2022 at 02:15:56 UTC, Ali Çehreli wrote:
> On 12/30/22 17:22, Salih Dincer wrote:
>
> > I guess there is no other way but to overload.
>
> Since the bodies of all three overloads are the same except 
> some types, they can easily be templatized.

You took the trouble, thanks, but there is a special reason why I 
use union.  If we want, we can write dynamic version without 
using std.traits:

```d
struct Values(T, size_t len = 1)
{
   union
   {
     T[len] data;
     ubyte[T.sizeof * len] bytes;
   }

   string toString()
   {
     import std.format;
     return format("%s: %(%02X-%)", data, bytes);
   }
}

   alias Char = Values!char;
   alias Wchar = Values!wchar;
   alias Dchar = Values!dchar;

void main()
{
   import std.stdio : writeln;

   Char[] str1;
   str1 ~= Char('B');
   str1 ~= Char('E');
   str1 ~= Char('$');
   str1.writeln;

   Wchar[] str2;
   str2 ~= Wchar('β');
   str2 ~= Wchar('€');
   str2 ~= Wchar('Ş');
   str2.writeln;

   Dchar[] str3;
   str3 ~= Dchar('β');
   str3 ~= Dchar('€');
   str3 ~= Dchar('$');
   str3.writeln("\n");

   Fun!"β€$".writeln;
}
/*
   [B: 42, E: 45, $: 24]
   [β: B2-03, €: AC-20, Ş: 5E-01]
   [β: B2-03-00-00, €: AC-20-00-00, $: 24-00-00-00]

   β€$: CE-B2-E2-82-AC-24
*/
```
However, I would like to draw your attention to the last line.  
Yeah, I won't be able to do that because it's New Year's Eve.  
But the line is like mixed mode because of the non-char data it 
contains, right?

Happy New Year...



More information about the Digitalmars-d-learn mailing list