Structure's inheritance
Dicebot
m.strashun at gmail.com
Mon May 13 02:20:14 PDT 2013
I believe template mixin are the way to go for structs. Small
annotated example:
// http://dpaste.1azy.net/56dd2513
mixin template Operators()
{
// Verify "a" field exists for better compile-time error.
Hard-coded here.
// As an alternative, name of field to use can be provided as a
template argument.
static assert(is(typeof(typeof(this).init.a)),
"class/struct that used this template mixin must have 'a'
member declared");
// Simple implementation for opBinary. As template mixins use
scope of instatiator,
// "this" will have target class/struct type. Basically, you can
write here any
// implementation you would normally do in a base class.
typeof(this) opBinary(string op)(typeof(this) rhs)
if (op == "+")
{
return Test(this.a + rhs.a);
}
}
struct Test
{
int a;
// that simple, almost same code amount as with "Test : TestBase"
mixin Operators;
}
void main()
{
Test x1 = { 2 };
Test x2 = { 3 };
import std.stdio;
// prints "Test(5)"
writeln(x1 + x2);
}
More information about the Digitalmars-d-learn
mailing list