Hi all,
I've got a little problem regarding const. In fact, my problem
originates from C++ where I've tried to implement a visitor that
deals with both const and non-const objects. As this did not work
out, I checked whether it would work in D. Unfortunately, I could
not figure out how. Maybe someone can help.
Basically, I would like to propagate constness to a lambda
function. Here's the example code:
import std.stdio;
class Hugo {
public int x = 42;
void blah(void function(Hugo h) f) {
f(this);
}
}
void main() {
Hugo hugo = new Hugo();
void function(Hugo h) f = function(Hugo h) {
h.x = 99;
};
hugo.blah(f);
const Hugo inge = hugo;
void function(Hugo h) g = function(Hugo h) {
writeln("foobar");
};
inge.blah(g);
}
This does not compile. The D compiler complains that I must not
call a mutable method on a const object (inge). However, if I
make the method const, I have to also make the parameter of the
lambda const which results in the compiler rejecting the call
"hugo.blah(f)" since this lambda actually modifies the object.
I hope you get what I want. I want to be able to call blah() on a
const instance of Hugo with a lambda that does not modify its
argument and otherwise call blah() with any function, even one
that modifies the object. Is that possible?
Thank you very much!