C ++ 템플릿 메타 프로그래밍에 대한 최고의 소개? [닫은]


112

정적 메타 프로그래밍 (일명 "템플릿 메타 프로그래밍")은 컴파일 시간에 프로그램을 실행할 수있는 훌륭한 C ++ 기술입니다. 이 표준 메타 프로그래밍 예제를 읽 자마자 전구가 머리에서 꺼졌습니다.

#include <iostream>
using namespace std;

template< int n >
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; };

template<>
struct factorial< 0 > { enum { ret = 1 }; };

int main() {
    cout << "7! = " << factorial< 7 >::ret << endl; // 5040
    return 0;
}

C ++ 정적 메타 프로그래밍에 대해 더 배우고 싶다면 최고의 소스 (책, 웹 사이트, 온라인 코스웨어 등)는 무엇입니까?


43
전구가 '꺼짐'또는 '켜짐'이 되었습니까?
horseyguy 2010 년

36
떨어져서. 확실히 꺼져 있습니다.
Thomas Eding 2012-08-30

답변:


108

[내 질문에 답하기]

지금까지 내가 찾은 최고의 소개는 Krzysztof Czarnecki와 Ulrich W. Eisenecker의 Generative Programming, Methods, Tools, and Applications의 10 장 "C ++의 정적 메타 프로그래밍"입니다 . ISBN-13 : 9780201309775; 및 C ++ 템플릿 의 17 장 "메타 프로그램" : David Vandevoorder 및 Nicolai M. Josuttis 의 전체 가이드 , ISBN-13 : 9780201734843.

대체 텍스트 대체 텍스트 대체 텍스트 대체 텍스트

Todd Veldhuizen은 여기에 훌륭한 튜토리얼이 있습니다 .

일반적으로 C ++ 프로그래밍을위한 좋은 리소스는 Andrei Alexandrescu의 Modern C ++ Design ( ISBN-13 : 9780201704310)입니다.이 책은 메타 프로그래밍과 다른 템플릿 기술을 혼합합니다. 특히 메타 프로그래밍에 대해서는 2.1 "컴파일 타임 어설 션", 2.4 "정적 상수를 유형에 매핑", 2.6 "유형 선택", 2.7 "컴파일 타임에 변환 및 상속 감지", 2.9 " NullTypeEmptyType "및 2.10 "유형 특성을 참조하십시오. ".

내가 찾은 최고의 중급 / 고급 리소스는 C ++ 템플릿 메타 프로그래밍입니다. David Abrahams와 Aleksey Gurtovoy의 , ISBN-13 : 9780321227256

한 권의 책을 선호한다면 C ++ Templates : The Complete Guide를 참조하세요.이 책 은 일반적으로 템플릿에 대한 최종 참조이기도합니다.


2
Todd Veldhuizen의 작품에 대한 링크가 오래되었습니다.
John R. Strohm 2012


1
링크가 수정되었습니다. 감사합니다!
jwfearn 2013

링크가 다시 끊어졌습니다!

1
@jwfearn 감사합니다.이 기사가 더 흥미로 웠지만 youtube.com/watch?v=Am2is2QCvxY (두 부분으로 구성됨)을 읽었습니다 . 대요 : 현대 템플릿 메타 프로그래밍 : 그것은 월터 E. 브라운 이야기입니다

24

Andrei Alexandrescu의 Modern C ++ Design book은 빠르고 효율적인 최신 C ++ 코드를위한 많은 트릭과 기타 트릭을 다루며 Loki 라이브러리 .

또한 언급 할 가치가있는 것은 Boost 라이브러리로, 이러한 기술을 많이 사용하고 일반적으로 매우 높은 품질을 제공합니다 (일부는 매우 조밀하지만).


12

Modern C ++ Design , Alexandrescu의 훌륭한 책 및 디자인 패턴 프레임 워크. 경고의 말씀,이 책을 읽은 후 저는 C ++ 사용을 중단하고 "이런, 더 나은 언어를 선택하고 무료로 얻을 수 있습니다"라고 생각했습니다.


5
"이런, 더 나은 언어를 선택하고 무료로 얻을 수 있습니다."음, 무슨 뜻입니까? 특히 "무료"로 혼란 스럽습니다. 그리고 어떤 다른 언어를 염두에 두셨습니까?
Pop Catalin

12
C ++ 템플릿 메타 프로그래밍은 유형 또는 유형 목록을 인수로 전달하는 것과 같은 모든 종류의 새로운 기능을 제공합니다. 이러한 기능의 대부분은 더 좋은 구문을 사용하여 Python과 같은 동적 유형 언어로 제공됩니다.
Florian Bösch

1
올바른 프로그램을 빠르게 작성할 수있는 언어를 찾고 있다면 Python이 C ++보다 낫습니다. C ++에서 제공하는 다른 기능이 필요한 경우 Lisp와 유사한 기능을 C ++에 추가하는 것이 다른 언어를 C ++ 화하는 것보다 낫습니다.
David Thornley

6

떠오르는 두 가지 좋은 책은 다음과 같습니다.

  • Modern C ++ Design / Andrei Alexandrescu (이름에도 불구하고 실제로 7 년이되었습니다!)
  • C ++ 템플릿 : 완전한 가이드 / Vandevoorde & Josuttis

상당히 심층적 인 분야이기 때문에 웹 사이트보다이 중 하나와 같은 좋은 책을 추천합니다. 고급 기술 중 일부는 코드가 어떻게 작동하는지 알아 내기 위해 얼마 동안 코드를 공부하게합니다!


5

Modern C ++ 는 제가 읽은 최고의 소개 중 하나입니다. 템플릿 메타 프로그래밍의 실제 유용한 예를 다룹니다. 또한 동반자 라이브러리 인 Loki를 살펴보십시오 .


5

경험이 많은 사람들의 목록이 제한되어 있기 때문에 많은 책 목록이 없을 것입니다. 템플릿 메타 프로그래밍은 2000 년 첫 번째 C ++ 템플릿 프로그래밍 워크샵을 중심으로 시작되었으며 지금까지 이름이 지정된 많은 저자가 참석했습니다. (IIRC, Andrei는 그렇지 않았습니다.)이 개척자들은 현장에 큰 영향을 미쳤으며 기본적으로 작성해야 할 내용이 작성되었습니다. 개인적으로 나는 Vandevoorde & Josuttis에게 조언하고 싶습니다. Alexandrescu 's는 현장에 익숙하지 않은 경우 어려운 책입니다.


4

Veldhuizen의 원본 논문이 좋았습니다. 전체 책을보고 싶다면 Vandevoorde의 책 "C ++ Templates Complete Guide"가 있습니다. 석사 과정에 들어갈 준비가되면 Alexandrescu의 Modern C ++ Design을 사용해보세요.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.