반환 유형에 따른 함수의 템플릿 추론?
C에서 템플릿 추론은 다음을 기반으로 템플릿 인수를 결정하는 편리한 방법을 제공합니다. 함수 호출에 제공된 인수입니다. 그러나 템플릿 추론에는 함수의 반환 유형을 기반으로 유형 인수를 추론할 수 없는 등 특정 제한 사항이 있습니다.
문제:
원본 질문은 다음 코드에서 Allocate() 함수를 호출할 때 형식 인수를 명시적으로 지정할 필요가 없도록 하려고 합니다.
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate(); GCPtr<B> ptr2 = GC::Allocate();</code>
답변:
안타깝게도 템플릿 반환 유형을 기반으로 유형 인수를 추론하는 데 추론을 사용할 수 없습니다. 대신, 그 반대입니다. 반환 유형은 템플릿 서명이 일치된 후에 결정됩니다.
해결 방법:
이 제한을 우회하려면 Allocate( ) 함수는 호출자로부터 유형 인수를 숨기는 도우미 함수로 래핑될 수 있습니다.
<code class="cpp">// helper template <typename T> void Allocate(GCPtr<T>& p) { p = GC::Allocate<T>(); } int main() { GCPtr<A> p = 0; Allocate(p); }</code>
이를 통해 호출자는 유형 인수를 명시적으로 지정하지 않고도 Allocate() 함수를 사용할 수 있습니다.
<code class="cpp">GCPtr<A> p = 0; Allocate(p);</code>
추가 참고 사항:
C 11에는 컴파일러가 초기화 프로그램에서 유형을 추론할 수 있도록 하는 auto 키워드가 도입되었습니다. 이렇게 하면 코드가 더욱 단순화됩니다.
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
위 내용은 C에서 함수의 반환 유형을 기반으로 템플릿 추론이 작동할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!