为什么这些模板化函数的行为不像虚函数?

时间:2012-01-06 02:30:41

标签: templates polymorphism virtual-functions d

在下面的代码中,我希望输出为

B
C

但令人沮丧的是

A
C

我能做些什么来让它按照我期望的方式行事吗?为什么这种行为首先发生? 我已经决定自己定义stuff的mixin模板并将其混合到每个覆盖写入的类中,这样可以解决问题,但这是一个丑陋的黑客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 个答案:

答案 0 :(得分:3)

引用online documentation

  

模板不能用于添加非静态成员或虚拟成员   函数到类。