Open Methods: From C++ to D
jmh530 via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Wed Aug 30 08:42:09 PDT 2017
On Wednesday, 30 August 2017 at 15:10:03 UTC, Jean-Louis Leroy
wrote:
>
> I sort of agree, and somewhat regret not picking 'openmethod'.
> I considered both. Also @specialize. If anyone had pushed for
> @openmethod before the article, I would almost certainly have
> given in.
>
> My reasoning was, I hope to promote the term 'method' as the
> standard name for polymorphism from outside, as opposed to
> vfunc. We usually say "virtual functions", rarely "virtual
> member functions". Membership is implicit.
We had some discussion about what to name it in the original
announce thread, but I didn't want to get too focused on
bikeshedding the names and you had made good points. @method is
probably better than @specialize. Not sure what additional
information you get from @openmethod, given that you're already
importing from openmethods, but I don't really care that much.
One thing you didn't really cover is how seamlessly interacts
with normal polymorphism. For instance, what if to your first
example, I add the following function (note: without @method) and
adjust main as below. I see no reason why this shouldn't work.
But you wouldn't be able to create a string kick(Animal animal)
function since that is created by the mixin.
string kick(Dog dog) { return "ct bark"; }
void main()
{
updateMethods();
import std.stdio : writeln;
Animal snoopy = new Dog, hector = new Pitbull;
writeln("snoopy.kick(): ", snoopy.kick()); // bark
writeln("hector.kick(): ", hector.kick()); // bark an dbite
Dog lassie = new Dog;
writeln("lassie.kick(): ", lassie.kick()); // ct bark
}
More information about the Digitalmars-d-announce
mailing list