반환 유형에 따른 함수의 템플릿 추론: 탐색
소개
에서 C, 템플릿 추론을 통해 컴파일러는 템플릿 함수를 호출할 때 형식 인수를 추론할 수 있습니다. 제공된 실제 인수를 기반으로 합니다. 이는 유형 인수를 명시적으로 지정할 필요성을 제거하여 코드를 단순화할 수 있습니다.
제안 시나리오
주어진 문제는 사용자가 템플릿 추론을 사용하여 다음을 수행하려는 시나리오를 제시합니다. 일반 Allocate 함수를 사용하여 다양한 유형의 객체에 메모리를 할당합니다. 구체적으로 그들은 다음 코드를 달성하려고 합니다.
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate(); GCPtr<B> ptr2 = GC::Allocate();</code>
현재 구현 대신:
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate<A>(); GCPtr<B> ptr2 = GC::Allocate<B>();</code>
할당 함수 템플릿
현재 할당 함수 템플릿은 다음과 같이 정의됩니다. 다음과 같습니다:
<code class="cpp">template <typename T> static GCPtr<T> Allocate();</code>
그러나 반환 유형만으로는 원하는 템플릿 추론을 달성할 수 없습니다. 유형 추론 프로세스는 주로 함수의 인수에 의존합니다.
도우미 함수를 사용한 해결 방법
이 제한을 극복하려면 도우미 함수를 사용하여 명시적 유형을 숨길 수 있습니다. 아래와 같은 인수:
<code class="cpp">// Helper function template <typename T> void Allocate( GCPtr<T>& p ) { p = GC::Allocate<T>(); } // Usage int main() { GCPtr<A> p = 0; Allocate(p); }</code>
C의 대체 구문 11
C 11에서는 템플릿 추론 중에 명시적인 유형 선언을 삭제할 수 있는 구문을 도입합니다.
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
결론
도우미 함수를 사용하거나 C 11 구문을 사용하여 반환 유형을 통한 템플릿 추론에만 의존하는 것은 불가능합니다. 원하는 동작에 맞는 편리한 대안을 제공합니다. 이러한 기술을 사용하면 단순화된 구문으로 다양한 유형의 객체를 할당할 수 있으므로 명시적인 유형 인수의 필요성이 줄어듭니다.
위 내용은 템플릿 추론은 C의 함수 반환 유형에만 기반하여 유형 인수를 추론할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!