Can I set the base class like this?
Jack
jckj33 at gmail.com
Tue Jan 26 15:58:01 UTC 2021
On Tuesday, 26 January 2021 at 14:15:25 UTC, frame wrote:
> On Tuesday, 26 January 2021 at 04:39:07 UTC, Jack wrote:
>> note the body is the same, what changes is the base class. I'd
>> like to avoid repeating myself when the body is the same and
>> only the base class changes.
>
> You would have to call it with correct instantiation like
>
> alias Foo = C!(A!bool);
>
> Of course T!MyType would not work but I don't think you want
> that anyway.
>
> It very depends on the use-case but just use a mixin where you
> can pass any type you want from template constructor if you
> don't want to repeat yourself:
>
>
> class MyType {
> }
>
> class A {
> }
>
> class B {
> }
>
> template base(T) {
>
> static if (is(T : A)) {
> bool doSomething() {
> return true;
> }
> }
> else static if (is(T : B)) {
> bool doSomething() {
> return false;
> }
> }
> else {
> void doSOmethingElse() {
> }
> }
> }
>
> class C(T1, T2) {
> mixin base!T2;
>
> T1 whatever() {
> return new T1;
> }
> }
>
> alias Foo = C!(MyType, A);
> alias Baa = C!(MyType, B);
Thank you! I find this approach rather elegant. Ability to pick
the method to be part of the class' body without macros is really
great.
More information about the Digitalmars-d-learn
mailing list