>  기사  >  백엔드 개발  >  C에서 함수의 반환 유형을 기반으로 템플릿 추론이 작동할 수 있습니까?

C에서 함수의 반환 유형을 기반으로 템플릿 추론이 작동할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-06 05:35:02692검색

Can Template Deduction Work Based on a Function's Return Type in C  ?

반환 유형에 따른 함수의 템플릿 추론?

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

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