On Friday, 17 January 2014 at 20:25:37 UTC, Stanislav Blinov wrote:

Heh, now I'm even more leaning towards a proxy. Because honestly, x.opDispatch!("release")() is even uglier than x.opDot().release() :D...


Well, what can I say? I didn't need to go very far. Because Phobos has such proxy. Which is called std.typecons.Proxy :) I skimmed over it in the docs several times, probably because the docs just say "Make proxy for a." without going into much detail. But the last time I spotted it, associative memory kicked in, I guess, and I stayed a bit longer to actually look at the example.

There is, however, at least one issue with it: template arguments are not forwarded properly:

---
class Widget {
auto inconsistent(T...)(T args) if (T.length) { return args[0]; }
}

auto widget = new Widget;
widget.inconsistent("hello", 10, 20); // works

auto uwidget = createUnique!Widget();
uwidget.inconsistent("hello", 10, 20); // Error: template instance inconsistent!() does not match template declaration inconsistent(T...)(T args) if (T.length)
uwidget.inconsistent!(string,int,int)("hello", 10, 20); //works
---

I hadn't had a chance for a closer inspection yet as to why though. In any case, that Proxy is a nice thing to have in the library!

Reply via email to