Christopher Wright wrote:
Andrei Alexandrescu wrote:
Yah, glad someone mentioned it :o). The best way is a blend - you can
statically dispatch on some popular/heavily-used names, then rely on a
hashtable lookup for dynamic stuff.
Andrei
You suggest:
auto opDotExp(string name)(...)
{
static if (name == "something")
{
code...
}
else
{
dynamic stuff
}
}
That isn't very clear. Why not write it this way:
auto opDotExp(string name, ...)
{
dynamic stuff
}
auto something (...)
{
code...
}
It's a good question. opDotExp leaves more flexibility because it allows
for a host of compile-time manipulations, e.g. decide to forward to a
member etc. Also consider this (probably Nick will turn blue):
struct Pascalize(T)
{
T m;
auto opDotExp(string name, T...)(T args)
{
return mixin("m."~tolower(name))(args);
}
}
struct S { void foo() { ... } }
Pascalize!S s;
s.foo(); // works
s.Foo(); // works too
s.fOo(); // yup, works again
Andrei