无涯教程-D语言 - 模板(Templates)

45 阅读1分钟

模板是通用编程的基础,它涉及以独立于任何特定类型的方式编写代码。

函数模板

将函数定义为模板会将其使用的一种或多种类型保留为未指定状态,以便稍后由编译器推导。在模板参数列表中定义了未指定的类型,该参数介于函数名称和函数参数列表之间。因此,函数模板具有两个参数列表-

  • 模板参数列表
  • 函数参数列表
import std.stdio; 

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

void main() { print(42);

print(1.2);

print("test"); }

如果我们编译并运行以上代码,这将产生以下输出-


多个参数

可以有多种参数类型。它们显示在下面的示例中。

import std.stdio;

void print(T1, T2)(T1 value1, T2 value2) { writefln(" %s %s", value1, value2); }

void main() { print(42, "Learnfk");

print(1.2, 33); }

如果我们编译并运行以上代码,这将产生以下输出-

 42 Learnfk 
 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("Learnfk"); stack.push("Toolfk");

writeln(stack.top); writeln(stack.length);

stack.pop; writeln(stack.top); writeln(stack.length); }

编译并执行上述代码后,将产生以下输出-

Learnfk 
2 
Toolfk 
1 

参考链接

www.learnfk.com/d-programmi…