2011-02-27 1 views
2

목표를 달성하기 위해 템플릿 메타 프로그래밍을 사용할 때 고려해야 할 엄지 손가락 규칙은 무엇입니까? 그리고 이 좋을까요 템플릿 metaprogramming을 사용하는 것이 boost과 같은 라이브러리 이외의 일반 코드보다 훨씬 효율적입니까?템플릿 메타 프로그래밍 엄지 손가락 규칙

답변

2

제가 생각할 수있는 한 가지 매우 유용한 규칙은 컴파일 오류를 가능한 "실제"문제에 가깝게 던지게하는 것입니다. 그렇게하면 문제를 추론하는 것이 더 쉬울뿐만 아니라 라이브러리를 사용하여 문제를 추론하는 다른 사람들에게도 더 쉽습니다. 여기

무슨 뜻인지의 인위적인 버전 : 당신이 있었다면 단순히 앞으로 첫번째 선언을 할 때 convert<int>을 시도하기위한 컴파일러 오류의하지 두드러진 설명을 얻을 것이다하는

template<typename Type> struct convert{}; 
template<> struct convert<double>{ static const int value = D_COORD; }; 
template<> struct convert<Degree>{ static const int value = ANGLE_COORD; }; 
template<> struct convert<Radian>{ static const int value = RADIAN_COORD; }; 

그런 다음 "변환"에 정의 된 유형이 없다는 것을 즉시 알려줍니다.

좋은 예를 들자면 나는 다른 사람에게 연기해야 ​​할 것 같습니다. 그러나 Loki을 살펴볼 수도 있습니다. 그것은 부스트가 아니지만 그것은 굉장합니다.