Overloading methods by constness?
Nathan Reed
nathaniel.reed at gmail.com
Tue Aug 21 20:19:11 PDT 2007
Hello,
In C++, you can overload methods by the constness of the method itself:
class Foo
{
void bar (); // #1
void bar () const; // #2
}
...
Foo f; f.bar(); // calls #1
const Foo g; g.bar(); // calls #2
I am wondering if there is any way to get similiar functionality in D?
I have tried the following:
class Foo
{
void bar () { ... }
const void bar () { ... }
}
but get a compiler error that the "bar"s conflict.
Why would I want to do this, you might ask? Well, I would like to use
this to write a pair of opSlice methods. With built-in arrays, you can
do this:
char[] str = "Hello, world".dup;
char[] substr = str[0..5];
const(char)[] str2 = "Hello, world";
const(char)[] substr2 = str2[0..5];
char[] substr3 = str2[0..5]; // fails
i.e., the slice returns either a char[] or a const(char)[] depending on
the constness of the array. However, I cannot see how to make my own
classes do the same thing, unless I can overload opSlice by constness.
Thanks,
Nathan Reed
More information about the Digitalmars-d-learn
mailing list