鍍金池/ 教程/ C++/ D語言模板
類的訪問修飾符
D語言運算符
D語言邏輯運算符
類指針
D語言元組
D語言指針
D語言模塊
D語言sizeof運算符
D語言混合類型
D語言封裝
D語言條件編譯
類的靜態(tài)成員
D語言do...while循環(huán)
D語言結(jié)構(gòu)體
重載
D語言字符串-String
D語言決策語句
D語言接口
D語言for循環(huán)
D語言switch語句
D語言關(guān)聯(lián)數(shù)組
D語言范圍
D語言枚舉Enums
契約式編程
D語言并發(fā)
D語言開發(fā)環(huán)境設(shè)置
D語言別名
D語言常值
D語言常量
D語言函數(shù)
D語言if嵌套語句
D語言循環(huán)
D語言概述,D語言是什么?
D語言運算符優(yōu)先級
D語言continue語句
D語言異常處理
D語言break語句
D語言if...else語句
D語言類和對象
類繼承
D語言字符
D語言教程
D語言關(guān)系運算符
比較操作符重載
構(gòu)造函數(shù)和析構(gòu)函數(shù)
D語言抽象類
D語言if語句
D語言賦值運算符
D中算術(shù)運算符
D語言類成員函數(shù)
D語言位運算符
D語言變量
D語言數(shù)據(jù)類型
D語言文件I/O
D語言數(shù)組
一元運算符重載
D語言嵌套switch語句
D語言基本語法
二元運算符重載
this指針
D語言聯(lián)合體
D語言模板
D語言嵌套循環(huán)
D語言while循環(huán)

D語言模板

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

模板是藍圖或公式創(chuàng)建一個泛型類或函數(shù)。

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

函數(shù)模板:

定義一個函數(shù)作為模板離開一個或多個使用作為非特定的類型,可以由編譯器后面推導(dǎo)出來。正在未指定的類型模板形參表上,它的函數(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");
}

如果我們編譯并運行上面的代碼,這會產(chǎn)生以下結(jié)果:

42
1.2
test

函數(shù)模板與多個類型參數(shù)

可以有多個參數(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);
}

如果我們編譯并運行上面的代碼,這會產(chǎn)生以下結(jié)果:

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

如果我們編譯并運行上面的代碼,這會產(chǎn)生以下結(jié)果:

Test2
2
Test1
1

上一篇:D語言枚舉Enums下一篇:D語言字符