interface Foo { void foo (); } template FooImpl () { void foo () {} } class FooClass // this needs a better name { mixin FooImpl; } interface Bar { void bar (); } template BarImpl () { void bar () {} } class BarClass // this needs a better name { mixin BarImpl; } class FooBar : Foo, Bar { mixin FooImpl; mixin BarImpl; // since "foo" is overloaded we need to manually bring in "foo" in the // overload set (or what it's called) alias FooImpl.foo foo; void foo (int a) {} }