C++11 템플릿 모듈 프로그래밍 - 템플릿 귀속

1724 단어
템플릿은 귀속 호출될 수 있습니다. 템플릿이 귀속되는 과정에서 앞에서 언급한 두 가지 컴파일러 계산을 실행할 수 있습니다. 그것이 바로 수치 계산과 유형 계산입니다.
다음은 컴파일링 기간에 N의 곱셈을 계산하기 위해 템플릿 컴파일링을 사용합니다.
template
struct Factorial
{
    enum { Value = N * Factorial::Value };
};

template<>
struct Factorial<1>
{
    enum { Value = 1 };
};


메인 템플릿template struct Factorial의 정의에서 템플릿 자체Factorial::Value를 사용한 것을 알 수 있습니다.컴파일러는 메인 템플릿을 다른 N - 1 값으로 구현하고 N이 1이 될 때까지 Factorial의 특화 버전 template<> struct Factorial<1> 을 선택하고 내부 Value가 1이 되며 귀속이 종료됩니다.
우리는 컴파일러에서 이 함수 __print(Factorial<5>::Value) 를 실행할 수 있으며, 컴파일러가 120을 출력하는 것을 볼 수 있다.
위의 예에서 우리는 템플릿 특화를 통해 귀속을 중지하는 것을 보았다.사실 Haskell 언어에서 계산 곱셈의 함수 실현을 비교해 보자.
factorial :: Int -> Int
factorial n = n * factorial (n - 1)
factorial 1 = 1

Haskell은 패턴 일치를 통해 조건 선택을 하고, 귀속을 통해 순환 제어를 하는 순수 함수식 언어이다.상기의factorial 정의에 따르면 인삼이 1일 때 패턴 매칭은 factorial 1 = 1 실현을 선택하고, 그렇지 않으면 factorial n = n * factorial (n - 1) 매칭의 귀속 실현을 선택한다.
위에서 우리가 C++ 템플릿을 사용하는 방식과Haskell에서 정의한 함수가 이렇게 유사하다는 것을 볼 수 있습니다.컴파일러가 템플릿의 특화 버전에 대한 선택은 Haskell이 패턴을 일치시키는 것과 같고, 이들의 순환 제어는 귀속을 통해 이루어진다.템플릿의 이러한 컴파일링 시 계산 능력은 일종의 순수 함수식 프로그래밍 모델로 도령이 완비되어 있음을 이미 증명하였다!
다른 것은 C++와 같은 컴파일러 계산이 지원하는 계산 대상은 성형 상수와 유형일 뿐이다.
C++와 같은 컴파일러 함수식 계산은 본고에서 소개하고자 하는 C++ 템플릿 원 프로그래밍이고 클래스 템플릿은 그 안에서 함수의 역할을 충당한다.본고에서 사용한 클래스 템플릿에 대한 모든 지식은 기본적으로 앞에서 말한 것들이다.다음에 우리는 클래스 템플릿을 규범화하여 함수식 계산과 더욱 일치하고 컴파일기 함수식 계산의 위력을 최대한 발휘할 수 있도록 할 것이다.
템플릿에 대한 기본 지식을 소개하고, 이른바'템플릿 프로그래밍'을 정식으로 소개합니다!
템플릿 모듈 프로그래밍
C++11 템플릿 프로그래밍 - 디렉터리로 돌아가기

좋은 웹페이지 즐겨찾기