位置:首頁 > 高級語言 > D語言教學 > D語言模板

D語言模板

模板是泛型編程,涉及編寫代碼的方式,獨立於任何特定類型的基礎。

模板是藍圖或公式創建一個泛型類或函數。

模板的功能,允許描述的代碼作為一種模式,讓編譯器自動生成的程序代碼。的源代碼部分可留至要填充,直到該部分是在程序實際使用的編譯器。編譯器填補了缺失的部分。

函數模板:

定義一個函數作為模板離開一個或多個使用作為非特定的類型,可以由編譯器後麵推導出來。正在未指定的類型模板形參表上,它的函數的名稱,函數參數列表之間進行定義。出於這個原因,函數模板有兩個參數列表:模板形參表和函數參數列表:

import std.stdio;

void print(T)(T value)
{
   writefln("%s", value);
}

void main()
{
   print(42);

   print(1.2);

   print("test");
}

如果我們編譯並運行上麵的代碼,這會產生以下結果:

42
1.2
test

函數模板與多個類型參數

可以有多個參數類型和它示出被顯示在下麵的例子。

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

類模板

正如我們可以定義函數模板,我們也可以定義類模板。下麵是例子定義類Stack和實現泛型方法,推動並從彈出堆棧中的元素。

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);
}

如果我們編譯並運行上麵的代碼,這會產生以下結果:

Test2
2
Test1
1