Purity, @safety, etc., in generic code
Jonathan M Davis
jmdavisProg at gmx.com
Fri Feb 22 12:27:25 PST 2013
On Friday, February 22, 2013 14:31:55 Steven Schveighoffer wrote:
> It is probably rare to have both a const and non-const overload, that is
> true, but it is not up to D to decide what design is best. We should take
> the most flexible approach, and allow designers to come up with whatever
> ideas they like. I don't think there is any significant extra work
> required to support const method overloads in the compiler, in fact it
> would be a more significant change to make that an exception.
A prime example of where overloading on const can be useful is caching. You
can write a function which caches its result for efficiency purposes, but the
const version can't cache, whereas the non-const one can. So, you can do
something like
auto calculate()
{
if(_dirty)
_cache = _doCalculation();
return _cache;
}
auto calculate() const
{
if(_dirty)
return _doCalculation();
return _cache;
}
If you couldn't overload on const, then that wouldn't be possible. You'd be
forced either to forgoe const and make it cache or to make it const and forgoe
the caching.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list