在下面的代碼,我期望的輸出是爲什麼這些模板化功能不像虛擬功能?
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();
}
在'的東西()()',第一組括號將包含模板參數,在這種情況下,他們是空的,但它仍然計數。我也使用語法糖作爲'b.stuff()'而不是完整的'b.stuff!()()' – 2012-01-06 02:56:13
(謝謝@Jean,我已經刪除了我原來的評論,因爲它是完全的我想我有一次關於D模板的新東西,但我已經忘了這一切!) – 2012-01-06 03:00:17
好吧,通過添加空模板參數來使模板函數成爲模板的技巧可能不會出現在大多數人身上。它的主要用途是解決不允許使用非模板化函數重載模板化函數的問題。所以,從長遠來看,這可能不是一個特別有用的功能。 – 2012-01-06 03:05:25