본문 바로가기

Traits3

[C++] Traits(특질) 구현 (3) References Ch 19, C++ Templates The Complete Guide Contents If-Then-Else Detecting Nonthrowing Operations Traits Convenience Type Classification Policy Traits If-Then-Else 아래와 같이 정의된 PlusResultT trait는 HasPlusT 라는 다른 traits에 따른 완전히 다른 구현을 가지고 있다. template struct HasPlusT : std::false_type {}; template struct HasPlusT : std::true_type {}; template struct PlusResultT { using Type = decltype(std::d.. 2023. 11. 24.
[C++] Traits(특질) 구현 (2) - SFINAE References Ch 19, C++ Templates The Complete Guide Contents SFINAE-Based Tratis IsConvertibleT Detecting Members SFINAE-Based Tratis SFINAE (substitution failure is not an error; 치환 실패는 에러가 아님) 원칙으로 인해 템플릿 인자를 추론하는 동안 형성되는 유효하지 않은 타입과 표현식은 에러가 아닌 단순히 추론 실패로 취급됩니다. 따라서 다른 오버로딩 후보를 선택할 수 있습니다. 원래 SFINAE는 함수 템플릿 오버로딩에서 발생할 수 있는 가짜 에러를 피하기 위해 도입되었지만, 현재는 특정 타입이나 표현식이 유효한지를 컴파일 과정에 결정할 수 있는 훌륭한 기법으로 .. 2023. 2. 2.
[C++] Traits(특질) 구현 (1) References Ch 19, C++ Templates The Complete Guide Contents Example: Accumulating a Sequence Traits versus Policies and Policy Classes Type Functions 템플릿을 활용하면 다양한 타입으로 클래스와 함수를 파라미터화할 수 있습니다. 템플릿을 타입이나 알고리즘에 맞춰 커스터마이징할 수 있도록 최대한 많은 템플릿 파라미터를 도입하도록 할 수도 있고, 클라이언트 코드의 정확한 니즈를 충족시키도록 템플릿화된 컴포넌트를 인스턴스화시킬 수도 있습니다. 다만, 실질적으로 수십 개의 템플릿 파라미터를 사용하는 것은 그리 좋지는 않습니다. 다행히 왠만한 경우, 추가하고 싶은 파라미터의 대부분은 기본값을 가지고.. 2023. 1. 18.