On the richness of C++
Bill Baxter
dnewsgroup at billbaxter.com
Wed Apr 16 14:50:29 PDT 2008
Sean Kelly wrote:
> == Quote from Walter Bright (newshound1 at digitalmars.com)'s article
>> Sean Kelly wrote:
>>> Sure, but templates don't suit every situation. It's not uncommon for
>>> APIs to have to overload on accepting a function and a delegate for
>>> flexibility.
>> The only way to merge function pointers with delegates is to have the
>> compiler generate trampolines. This isn't very runtime efficient - the
>> template approach will be faster.
>
> Certainly. Templates are always faster. But they don't always suit. To
> choose the simplest example, let's say that I want to ship a library with
> no source code exposed. Templates are obviously out. Now, to support
> callable parameters I must either overload routines for both function and
> delegate simply to account for pointers to global vs. non-global callable
> routines, or I need to use a wrapper object to pass instead. Either way,
> the same efficiency is lost, and I'm stuck doing a bunch of wrapping or
> conversion in library code as well. Now perhaps the library is indeed the
> best place for this, but either way I disagree that "just use templates
> because they're faster" is an acceptable solution for every situation. The
> 80-20 rule dictates that generalized arguments about performance are
> baseless anyway because 80% of the time the performance difference
> isn't even noticeable. Rather, I would argue that in such instances
> elegance is of utmost importance because of its effect on code
> maintainability. The great thing about D is that it often manages to
> achieve top-tier performance in an eminently elegant manner.
Example #2 is that you might want a virtual function that accepts a
callable. Something like setCallback(&fn).
--bb
More information about the Digitalmars-d
mailing list