C++11 템플릿 모듈 프로그래밍 - 템플릿 귀속
다음은 컴파일링 기간에 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 템플릿 프로그래밍 - 디렉터리로 돌아가기
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.