나는 최근에 C++로 템플릿 메타 프로그래밍에 들어가고 있으며 몇 가지 기본 기능을 각각의 재귀 적 컴파일 타임 템플릿 정의로 변환하려고 시도해 왔습니다. 예를 들어C++에서 재귀 클래스 정의를 처리하는 방법은 무엇입니까?
:
template <typename T, T A, unsigned int N>
class pow { enum : T { value = A * pow<T, A, N-1>::value } };
template <typename T, T A> class pow<T, A, 0> { enum : T { value = 1 } };
구문과 템플릿의 힘은 날 놀라게. 그러나 한 가지 질문은 나를 괴롭 히고 있습니다. C++에서 이러한 재귀 정의를 어떻게 처리합니까? 더 구체적으로 (현명한 자원)
또는 :
- 컴파일러 (/ 방법 메모리가 할당) 열거 값을 포함하는 템플릿 클래스의 인스턴스 생성을 어떻게 처리합니까 어떻게
?
생성 된 모든 클래스가 컴파일 후에 메모리에 남아 있습니까? 아니면 최상위 클래스 (정리) 만 유지하는 컴파일러에서 최적화되어 있습니까?
RAM에 독립적 인 최대 재귀 깊이가 있습니까? (컴파일러 자체의 제한 사항)?
이러한 구조의 표준 컴파일에 대한 자세한 설명은 매우 높이 평가할 수 있습니다.
_ "최대 재귀 깊이가 있는가하는 ..."_ 경고 것 .org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html # C_002b_002b-Dialect-Options –
그러면 currenrly 1024입니다. 그러나 그것은 컴파일러의 제약 조건인가 아니면 컨벤션인가? (이전의 C++ 표준에서는 17이 이상한 선택 이었기 때문에)? –
컴파일러가 인스턴스화 된 유형을 덤프하는 것을 상상할 수 없습니다. 나중에 언젠가는 다시 사용할지 여부를 알 수있는 방법이 없습니다. 링크 단계에서 컬링 (culling)이 수행됩니다. 그리고 메타 프로그래밍을 통해 나는 도둑질이 완전해질 것으로 기대합니다. – SoronelHaetir