C에서 템플릿 추론은 일반 함수에 대한 매개변수 유형을 유추하는 데 중요한 역할을 합니다. 그러나 함수의 반환 유형만 활용하여 단순화된 템플릿 추론이 바람직할 수 있습니다.
다음 예를 고려하세요.
<code class="cpp">class GC { public: template <typename T> static GCPtr<T> Allocate(); };</code>
여기에서 Allocate 함수는 일반 유형 매개변수를 사용합니다. T는 T 유형의 객체에 대한 포인터를 반환합니다. 템플릿 추론을 사용하면 다음과 같이 객체 할당 구문을 단순화할 수 있습니다.
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate(); // Desired output</code>
안타깝게도 C에서는 반환이 불가능하므로 C에서는 불가능합니다. 함수 유형은 템플릿 추론에 포함되지 않습니다. 대신 템플릿 서명은 함수 호출 인수를 기반으로 일치됩니다.
대체 솔루션:
한 가지 해결 방법은 명시적 유형 사양을 숨기는 도우미 함수를 활용하는 것입니다.
<code class="cpp">template <typename T> void Allocate(GCPtr<T>& p) { p = GC::Allocate<T>(); } int main() { GCPtr<A> p = 0; Allocate(p); }</code>
이 접근 방식에서 Allocate 함수는 포인터에 대한 참조를 인수로 받아들이고 실제 할당은 내부적으로 처리됩니다. 이를 통해 유연성을 희생하지 않고 간편하게 사용할 수 있습니다.
C 11 개선:
C 11에서는 템플릿 추론 규칙이 확장되어 유형 선언 중 하나를 생략할 수 있습니다. :
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
이렇게 하면 구문이 더욱 단순화되어 특정 시나리오에서 더 편리해집니다.
위 내용은 함수 반환 유형을 사용하여 C 템플릿 추론을 단순화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!