Can opApply be made @nogc?

rikki cattermole rikki at cattermole.co.nz
Fri Oct 19 23:43:18 UTC 2018


On 20/10/2018 12:32 PM, solidstate1991 wrote:
> Since it's a bit difficult to make tree traversal through range 
> (especially if someone wants to make it @nogc), I thought I'll make it 
> through opApply override, however the delegate passed by it doesn't have 
> the @nogc attribute, which would automatically make it incapable to be 
> used in a @nogc context.
> 
> I also don't know if it would work with structs instead of classes, 
> since they're easier to handle in a @nogc situation.
class Foo
{
     uint[2] array;

     int opApply(scope int delegate(ref uint) @nogc dg) @nogc
     {
         int result = 0;

         for (int i = 0; i < array.length; i++)
         {
             result = dg(array[i]);
             if (result)
                 break;
         }
         return result;
     }
}

void test()
{
     Foo a = new Foo();

     a.array[0] = 73;
     a.array[1] = 82;

     foreach (uint u; a)
     {
         printf("%d\n", u);
     }
}


More information about the Digitalmars-d-learn mailing list