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