Getting the const-correctness of Object sorted once and for all
John
nospam at unavailable.com
Mon May 14 06:27:41 PDT 2012
On Monday, 14 May 2012 at 06:04:33 UTC, Mehrdad wrote:
> On Monday, 14 May 2012 at 03:19:57 UTC, Jonathan M Davis wrote:
>> I suspect that the folks who are looking for absolutely every
>> CPU cycle and want caching and lazy-loading in their types
>
> It's not a CPU cycle issue.
>
> Caching/lazy-loading can make the difference between a window
> that freezes, and a window that doesn't.
You can still do this pretty easily. You just have to cast away
const.
You can even make it reusable.
mixin template TrustedToString() {
const @safe pure nothrow string toString() {
return unsafeToString();
}
final const @trusted pure nothrow string unsafeToString() {
auto nonConstThis = cast(Unqual!(typeof(this)))this;
return nonConstThis.trustedToString();
}
}
class Foo {
public:
const @safe pure nothrow string toString() {
return "Foo";
}
}
class Bar : Foo {
public:
mixin TrustedToString;
final pure @trusted nothrow string trustedToString() {
if (cachedString.length == 0) {
cachedString = "Bar";
}
return cachedString;
}
string cachedString;
}
unittest {
auto f = new Foo();
assert(f.toString() == "Foo");
auto b = new Bar();
assert(b.toString() == "Bar");
}
More information about the Digitalmars-d
mailing list