模板是通用編程的基礎,它涉及以獨立于任何特定類型的方式編寫代碼。
將函數(shù)定義為模板會將其使用的一種或多種類型保留為未指定狀態(tài),以便稍后由編譯器推導。在模板參數(shù)列表中定義了未指定的類型,該參數(shù)介于函數(shù)名稱和函數(shù)參數(shù)列表之間。因此,函數(shù)模板具有兩個參數(shù)列表-
import std.stdio;
void print(T)(T value) {
writefln("%s", value);
}
void main() {
print(42);
print(1.2);
print("test");
}
如果我們編譯并運行以上代碼,這將產生以下輸出-
42
1.2
test
可以有多種參數(shù)類型。它們顯示在下面的示例中。
import std.stdio;
void print(T1, T2)(T1 value1, T2 value2) {
writefln(" %s %s", value1, value2);
}
void main() {
print(42, "Test");
print(1.2, 33);
}
如果我們編譯并運行以上代碼,這將產生以下輸出-
42 Test
1.2 33
正如我們可以定義函數(shù)模板一樣,我們也可以定義類模板,下面的示例定義了Stack類,并實現(xiàn)了通用方法來推送和彈出堆棧中的元素。
import std.stdio;
import std.string;
class Stack(T) {
private:
T[] elements;
public:
void push(T element) {
elements ~= element;
}
void pop() {
--elements.length;
}
T top() const @property {
return elements[$- 1];
}
size_t length() const @property {
return elements.length;
}
}
void main() {
auto stack=new Stack!string;
stack.push("Test1");
stack.push("Test2");
writeln(stack.top);
writeln(stack.length);
stack.pop;
writeln(stack.top);
writeln(stack.length);
}
編譯并執(zhí)行上述代碼后,將產生以下輸出-
Test2
2
Test1
1
更多建議: