>  기사  >  백엔드 개발  >  템플릿 추론은 C의 함수 반환 유형에만 기반하여 유형 인수를 추론할 수 있습니까?

템플릿 추론은 C의 함수 반환 유형에만 기반하여 유형 인수를 추론할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-06 06:25:02476검색

Can Template Deduction Infer Type Arguments Based Solely on Function Return Type in C  ?

반환 유형에 따른 함수의 템플릿 추론: 탐색

소개

에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.