메타 기능을 기반으로 전문화해야하는 기본 템플릿이 있습니다. 일반적인 관용구 그러나부울 메타 기능을 기반으로 클래스 템플릿을 특수화하는 방법은 무엇입니까?
template<class T,class E = void>
struct foo { };
template<class T>
struct foo<T,std::enable_if_t<is_xxx<T>{}> > {};
처럼, 나는 기본 템플릿 (여분의 SFINAE 자리없이 즉)
template<class T>
struct foo { };
로 기록되는 상황을 가지고 있고 그것을 변경할 수 없습니다하고있다. 특성을 기반으로 특수화하는 가장 좋은 방법은 무엇입니까 (반환 유형 또는 추가 인수를 기반으로하는 함수 템플릿의 경우 대부분 할 수 있습니다)?
이template<class T, class E = void>
struct foo_base { };
template<class T>
struct foo : foo_base<T, std::enable_if_t<is_xxx<T>{}>> { };
그런 다음 foo_base
에 foo
의 회원을 이동 :
왜 수정할 수 없는지 언급하면 해결책이 될 수 있습니다. – Yakk
기본 템플릿이 표준이 아닌 제 제어하에 있습니다. 'foo','foo '등과 같은 매칭을 기반으로하는 경우, 여분의 E = void 일 필요는 없습니다. –
abir
어떻게 통제 할 수 있습니까? 파일이 하드 드라이브에 있습니다. 그렇지 않습니까? 나는 진지해. 당신이 그것을 바꾸지 못하게하는 것은 무엇일까? 당신이 접근 할 수없는 다른 바이너리를 바꾸기에는 너무 많은 코드의 다른 특수화? 업데이트 후 재 패치해야합니까? 회사 정책? 많은 이유가 있으며 중요한 요소 일 수 있습니다. – Yakk