Jarrett Billingsley wrote:
On Fri, Apr 3, 2009 at 11:20 AM, Andrei Alexandrescu
<seewebsiteforem...@erdani.org> wrote:

You can't.  D's varargs suck.
Of course you can. Where did that come from?

void foo(T...)(T args) { bar(args); }
void bar(T...)(T args) {  foreach (a; args) writeln(a); }

*NOT* the same thing.  They are templated, which means a new
instantiation for each different combination of argument types, and
cannot be virtual.  Please keep that in mind.

But my point was that variadic templates can be ideal wrappers for the non-templated variadics, which can be virtual. It's the best of both worlds, you get no bloating and comfortable calling syntax too.

I think it's silly to ask "I want to do... xyz... but without templates because templates aren't virtual/cause bloating/bring up painful memories". Templates are an excellent starting point in many designs because they preserve full typing of the parameters. Then, of course you can route them to dynamic functions no problem.

This brings me to another point - I need to file an enhancement request. Interfaces must support non-virtual functions, e.g. final functions and templates.


Andrei

Reply via email to