반영 속성 지향 매크로 템플릿 비구조적 ( 반의어 : 구조적 ) 배열 비결정 병렬 컴퓨팅 프로세스 지향 확률론적 스택 지향 구조적 ( 반의어 : 비구조적 ) 블록 구조 객체 지향 행위자 기반 클래스 기반 병행 프로토타입 기반 관심사의 분리에 따라 : 관점 지향 역할 지향 주체 지향 재귀 심볼릭 값 레벨 ( 반의어 : 함수 레벨 ) [UNK] 프로그래밍 v. d. e. h 템플릿 메타프로그래밍 ( template metaprogramming ) 은 템플릿을 사용하는 프로그래밍 기법으로, 컴파일러에게 프로그램 코드를 생성하도록 하는 방식이다. 이러한 기법은 컴파일 시점에 많은 것을 결정하도록 하여, 실행 시점의 계산을 줄여준다. 이 기법은 C 프로그래밍 언어에서 주로 사용된다. 목차 1 예제 2 장점 3 단점 4 외부 링크 예제 [ 편집 ] 다음의 예는 C
템플릿 특수화를 사용하면, 프로그램에서 사용되지 않는 펙토리얼들은 구할 것도 없이, 사용되는 펙토리얼의 값만을 컴파일할 때 구할 수 있다. template < int N > struct Factorial { enum { value = N * Factorial < N - 1 > : : value } ; } ; template < > struct Factorial < 0 > { enum { value = 1 } ; } ; / / Factorial < 4 > : : value = = 24 / / Factorial < 0 > : : value = = 1 위 두 예제는 기능적 측면에서는 유사해 보이지만, 첫 번째 예제는 프로그램이 실행될 때 계산하고 두 번째 예제는 컴파일할 때 값을 구하여 사용한다. 두 번째 예제와 같이 사용하기
> & Vector < 2 > : : operator = ( const Vector < 2 > & rhs ) { value [ 0 ] = rhs. value [ 0 ] ; value [ 1 ] = rhs. value [ 1 ] ; return * this ; } 컴파일러 최적화 도구가 반복문인'for'를 제외하는 까닭은, 템플릿 인자인'dimension'이 컴파일 시간에 전달되는 상수이어서이다. 이 기법의 실제 구현을 보려면 filpcode. com에 올려진 글을 참고하라. C에서, 템플릿 메타프로그래밍은 튜링 완전성을 갖고 있는데, 이게 뜻하는 바는 다음과 같다. 컴퓨터는 표현 가능한 어떤 계산도 처리할 수 있는데, 어떤 형태에서는 템플릿 메타프로그램에 의해서도 가능하다는 뜻이다.
언어 [UNK] 日 本 語 [UNK] / [UNK] 中 文 링크 편집 이 문서는 2019년 5월 11일 ( 토 ) 19 : 39에 마지막으로 편집되었습니다. 모든 문서는 크리에이티브 커먼즈 저작자표시 - 동일조건변경허락 3. 0에 따라 사용할 수 있으며, 추가적인 조건이 적용될 수 있습니다. 자세한 내용은 이용 약관을 참고하십시오. [UNK] 미국 및 다른 국가에 등록되어 있는 Wikimedia Foundation, Inc. 소유의 등록 상표입니다. 개인정보 정책 위키백과 소개 면책 조항 개발자 쿠키 정책 모바일 보기
단 템플릿 내부의 일반 코드에서는 상관없다. 타입에 대한 재귀 코드를 작성하는 일은 매우 고되고 상당한 숙련도를 요구한다. 함수 템플릿과 클래스 템플릿의 동작은 미묘하게 다르다. 함수 템플릿을 특수화하지 말아야 하는 이유 [ 2 ] 를 찾아보자. 가독성 템플릿 메타프로그래밍의 문법과 형태는 일반적인 C 프로그래밍에 비해 훨씬 난해하다. 아예 다른 메타언어 또는 스크립트 언어로 취급하는 것이 좋다. 타입 제한을 위해 작성한 SFINAE 문장이 함수 본문보다 몇 배 더 길어지는 배와 배꼽이 뒤바뀐 상황도 볼 수 있다. 디버깅 시에 나오는 오류 메시지가 장황하고 복잡하다. 타입 연산이 들어가기 때문에 실행시간 오류가 한 줄로 끝날 부분이 한'화면'을 넘어가는 경우도 생긴다. 수십, 수백 줄에
템플릿 메타프로그래밍 - 위키백과, 우리 모두의 백과사전 템플릿 메타프로그래밍 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 프로그래밍 패러다임 행위 에이전트 지향 배열 지향 오토마타 기반 병행 컴퓨팅 상대주의적 프로그래밍 데이터 기반 선언형 ( 반의어 : 명령형 ) 함수형 함수 논리형 순수 함수형 논리형 가추법 Answer set 병행 논리 함수 논리 귀납적 논리 제약 제약 논리 병행 제약 논리 데이터플로 플로 기반 반응형 동적 / 스크립트 사건 기반 함수 레벨 ( 반의어 : 값 레벨 ) 포인트 프리 스타일 연결식 제네릭 명령형 ( 반의어 : 선언형 ) 절차적 객체 지향 문학적 언어 지향 자연어 프로그래밍 규율 지향 도메인 특화 문법 지향 의도적 메타프로그래밍 자동 귀납적 프로그래밍 반영 속성 지향 매크로 템플릿 비구조적 ( 반의어 : 구조적 ) 배열 비결정 병렬 컴퓨팅 프로세스 지향 확률론
하고 두 번째 예제는 컴파일할 때 값을 구하여 사용한다. 두 번째 예제와 같이 사용하기 위해서 컴파일러는 컴파일할 때 템플릿의 인자를 정확히 알고 있어야 하므로, Factorial < X > : : value가 컴파일 시점에 계산되기 위해서, X는 컴파일 시점에 알 수 있는 상수 값이어야 한다. 템플릿 메타프로그래밍은 알기 힘든 문법 구조를 가지고 있으나 쓸모있는 용도가 있다. 어떤 값 n이 있고 이 값이 컴파일 시간에 전달된다고 하면, n 차원 벡터 클래스를 만들 수 있다. 고전적인 방법으로 n 차원 벡터를 만드는 것보다 반복문이 필요 없고, 상당히 최적화된 코드를 얻을 수 있어 좋다. 아래의 덧셈 연산자 코드를 살펴보자. n 차원 벡터를 추가하기 위해 아래
때문에 실행시간 오류가 한 줄로 끝날 부분이 한'화면'을 넘어가는 경우도 생긴다. 수십, 수백 줄에 걸쳐 변수 하나를 표현한 오류를 보고 있자면 분석할 방법부터 찾고 봐야 한다. 이는 정의 없는 템플릿 클래스에 타입을 집어넣어서 확인하는 기법이나 템플릿 오류 분석기 등을 동원해야 수월하게 넘길 수 있다. 컴파일러마다 템플릿을 사용하는 방법이 조금씩 다르다. 표준을 완벽히 준수하는 컴파일러가 드물기 때문에 이식성 문제를 겪고 있다. 라이브러리 보안 문제 배포할 때 다른 개발자들에게 내부 코드를 강제로 공개하게 된다. static이나 이름 없는 namespace 를 통해 다른 파일에서 실행되지 못하게 막을 수가 없게 된다. extern " C " 가 동작하지 않게 된다. 이는 외부 C 함수에서 템플릿 코드를 호출
켈, 하스켈에서의 형 안전 메타프로그래밍 ↑ 가 나 Scott Meyers. 《 Effective Modern C 》. ↑ 《 Exceptional C item 7 》. 원본 주소 " " 분류 : 컴파일러 이론C 둘러보기 메뉴 개인 도구 로그인하지 않음토론기여계정 만들기로그인 이름공간 문서토론 변수 보기 읽기편집역사 보기 더 보기 검색 둘러보기 대문사용자 모임요즘 화제최근 [UNK] 문서 보기임의 문서로도움말기부 도구 여기를 가리키는 문서가리키는 글의 최근 [UNK] 올리기특수 문서 목록고유 링크문서 정보위키데이터 항목이 문서 인용하기 인쇄 / 내보내기 책 만들기PDF로 다운로드인쇄용 판 다른 언어 [UNK] 日 本 語 [UNK] / [UNK] 中 文 링크 편집 이 문서는 2019년 5월 11일 ( 토 ) 19 : 39에
에서 주로 사용된다. 목차 1 예제 2 장점 3 단점 4 외부 링크 예제 [ 편집 ] 다음의 예는 C 언어로 기술하였다. 메타프로그래밍 기법 없이, 계승 함수는 다음과 같이 재귀적으로 구현할 수 있다. int factorial ( int n ) { if ( n = = 0 ) return 1 ; return n * factorial ( n - 1 ) ; } / / factorial ( 4 ) = = ( 4 * 3 * 2 * 1 ) = = 24 / / factorial ( 0 ) = = 0! = = 1 이 경우 factorial ( 4 ) 의 값은 실행 시점에 계산된다. 반면 템플릿 메타프로그래밍과 재귀의 탈출 조건을 제공하는 템플릿 특수화를 사용하면, 프로그램에서 사용되지 않는 펙토리얼들은 구할 것도 없이, 사용되는
템플릿 메타프로그래밍(template metaprogramming)은 템플릿을 사용하는 프로그래밍 기법으로, 컴파일러에게 프로그램 코드를 생성하도록 하는 방식이다. 이러한 기법은 컴파일 시점에 많은 것을 결정하도록 하여, 실행 시점의 계산을 줄여준다. 이 기법은 C 프로그래밍 언어에서 주로 사용된다.