Huh, we've had quite a few of these threads in a row. First this one with callbacks, and then this one about how it goes wrong if you try to cheat it with unsafe, and now this.
Unfortunately the answer is that unless you repeat the code with the macro, no, you can't avoid it.