template <int I> void div(char (*)[I % 2 == 0] = 0) {
// invoked if I is an even number
}
template <int I> void div(char (*)[I % 2 == 1] = 0) {
// invoked if I is an odd number
}
div<3>(0), div<4>(0) 이렇게 쓰면 각자 다른 템플릿이 호출되는데 그 이유가 진짜 감이 하나도 안 옴..
template <int I> void div(char (*)[I % 2 == 0] = 0) {
// invoked if I is an even number
}
template <int I> void div(char (*)[I % 2 == 1] = 0) {
// invoked if I is an odd number
}
div<3>(0), div<4>(0) 이렇게 쓰면 각자 다른 템플릿이 호출되는데 그 이유가 진짜 감이 하나도 안 옴..
i % 2 연산만 알면 될거같은데 뭐가 문제
뭐가 감이 안온단거임 - dc App
와 저렇게도 쓸수잇구나 - dc App
흠...
인자 목록 (char(*)[I % 2 == 0] = 0) 이게 무슨 의미임?
저거 호출하려면 인자에 0을 넣거나 아무것도 안 넣어야만 호출 되던데
https://stackoverflow.com/questions/28987073/what-does-charint-mean-in-c
간단하게 l 을 매개변수라고 생각해보자
캐릭터 포인터형 배열크기 0짜리랑 1짜리 두개로 프리컴파일해서 함수 다른거 호출되게 메타프로그래밍 한거자너 신기해할 필요없음 리더빌리티 떨어지자나
이런 게 메타프로그래밍 일종이구나.. 템플릿 메타프로그래밍 배워보고 싶은데 실제 개발에서는 별로 안 쓰이는 편인가요?? 그래도 런타임 성능은 이게 일반 분기보다 낫겠죠?
TMP는 실무에서 거의 효용성이 없습니다. 차라리 미리 계산된 테이블을 가지는게 훨씬 낫기 때문이죠. 그렇다고 완전 꽝은 아닙니다. 최적화 코드를 짧게 만들수 있어서 몇몇 곳에서는 유용하게 쓸수있긴 합니다.
실무에서 TMP 씁니다 - return 0;