std.algorithm.countUntil and alias

Salih Dincer salihdb at hotmail.com
Thu Oct 24 06:31:16 UTC 2024


On Wednesday, 23 October 2024 at 15:25:48 UTC, Salih Dincer wrote:
> If it were me, I would equip my type with aliases like below. 
> But for some reason I don't understand, the enum Numbers works, 
> while the enum Test which is of type string doesn't!
>

I figured out why it wasn't working. It turns out I had made a 
size_t comparison with a string. In this case, it's smart to move 
away from string altogether and use alias fun(S). Here's D's 
perfect syntax:

```d
struct Zoo(size_t i)
{
   size_t count;
   static index = i;
}

void main()
{
   enum Animal { dog = 3, cow, fox, cat }

   Animal[] animals;
   with(Animal) animals = [dog, cow, fox, cat];

   alias myType = Zoo!(Animal.fox);
   alias fun(S) = e => e == S.index;

   import std.algorithm : countUntil;
   auto myStruct = myType(
     animals.countUntil!(fun!myType)
   );

   assert(myStruct.index == 5);
   assert(myStruct.count == 2);

   import std.stdio;
   myStruct.writeln(": ", animals);
   // Zoo!5LU(2): [dog, cow, fox, cat]
}
```

SDB at 79




More information about the Digitalmars-d-learn mailing list