×
D语言教程D语言概述,D语言是什么?D语言开发环境设置D语言基本语法D语言变量D语言数据类型D语言枚举EnumsD语言常值D语言运算符D中算术运算符D语言关系运算符D语言逻辑运算符D语言位运算符D语言赋值运算符D语言sizeof运算符D语言运算符优先级D语言循环D语言while循环D语言for循环D语言do...while循环D语言嵌套循环D语言break语句D语言continue语句D语言决策语句D语言if语句D语言if...else语句D语言if嵌套语句D语言switch语句D语言嵌套switch语句D语言函数D语言字符D语言字符串-StringD语言数组D语言关联数组D语言指针D语言元组D语言结构体D语言联合体D语言范围D语言别名D语言混合类型D语言模块D语言模板D语言常量D语言文件I/OD语言并发D语言异常处理契约式编程D语言条件编译D语言类和对象D语言类成员函数类的访问修饰符构造函数和析构函数this指针类指针类的静态成员类继承重载一元运算符重载二元运算符重载比较操作符重载D语言封装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

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)