On 08/04/2026 12:18 PM, matheus wrote:
On Tuesday, 7 April 2026 at 23:48:37 UTC, Richard (Rikki) Andrew Cattermole wrote:
On 07/04/2026 7:08 AM, matheus wrote:
Hello,

Back in C days I used to write code with function pointer to avoid writing branches inside loops,

To avoid this:

for(;;){
   if(opt == 1){ func_1(); }else{func_2()};
}
Or maybe using switch if there were more options...

So I used to do:

if(opt == 1){ fp  = &func_1(); }else{ fp = &func_2()};

for(;;){
  fp();
}


I would like to know if there is a different way of doing that in D during RT execution and dynamic change of function execution before the loops?

Thanks in advance,

Matheus.

How I typically do it:

```d
void outer() {
    void inner(bool a, bool b)() {
        for(;b;) {
            static if (a) {}
        }
    }

    if (cond1 && !cond2)
        inner!(true, false);
    else if (cond2 && !cond1)
        inner!(false, true);
    else if (cond1 && cond2)
        inner!(true, true);
    else
        inner!(false, false);
}
```

But this is CT, my problem was to this during RT.

Thanks anyway for responding,

Matheus.

It is optimizing RT, but we use CT to factor out the conditionals.

I've done this specifically when I would otherwise have RT if statements in loops.

Reply via email to