Почему эти шаблонные функции не ведут себя как виртуальные функции? - PullRequest
2 голосов
/ 06 января 2012

В следующем коде я ожидаю, что результат будет

B
C

Но, к сожалению, достаточно, что это

A
C

Есть ли что-то, что я могу сделать, чтобы заставить его вести себякак я ожидал?И почему это происходит в первую очередь?
Я смирился с определением шаблонов микшинов stuff и смешиванием их с каждым классом, который переопределяет запись, что решает проблему, но является отвратительным взломом IMO.

import std.stdio : writeln;

class A {
    void write() {
        stuff();
    }

    void stuff()() {
        writeln("A");
    }
}


class B : A {
    void stuff()() {
        writeln("B");
    }
}

class C : A {
    void write() {
        stuff();
    }

    void stuff()() {
        writeln("C");
    }

}

void main (string[] args) {
    B b = new B();
    b.write();
    C c = new C();
    c.write();
}

1 Ответ

3 голосов
/ 06 января 2012

Цитировать онлайн документацию ,

Шаблоны нельзя использовать для добавления нестатических элементов или виртуальных функции для классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...