> 백엔드 개발 > C++ > ## C 17의 클래스 템플릿에 대한 템플릿 인수를 부분적으로 추론할 수 있나요?

## C 17의 클래스 템플릿에 대한 템플릿 인수를 부분적으로 추론할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-10-25 07:36:29
원래의
757명이 탐색했습니다.

## Can We Partially Deduce Template Arguments for Class Templates in C  17?

C 17의 부분 클래스 템플릿 인수 추론

C 17 기능인 "클래스 템플릿 인수 추론"(CTAD)을 사용하면 컴파일러가 자동으로 추론할 수 있습니다. 인스턴스화될 때 클래스의 템플릿 인수입니다. 이렇게 하면 코드가 단순화되고 명시적인 템플릿 인수를 지정할 필요가 없습니다.

그러나 템플릿 인수를 부분적으로 지정하고 나머지는 추론할 수 있습니까?

시도한 해결 방법 1:

부분 공제를 달성하기 위한 한 가지 시도는 다음과 같이 별칭 템플릿을 만드는 것입니다.

<code class="cpp">template<class T, class U> using Base2 = Base<T, U, double>;</code>
로그인 후 복사

그런 다음 별칭을 사용하여 인수를 부분적으로 지정합니다.

<code class="cpp">void func() {
    Base2 val(1, 2);
}</code>
로그인 후 복사

그러나 이로 인해 별칭 템플릿을 사용하려면 전체 템플릿 인수 목록이 필요함을 나타내는 컴파일 오류가 발생합니다.

해결 방법:

안타깝게도 부분 공제는 다음에서 직접 지원되지 않습니다. C 17. 그러나 다음과 같은 몇 가지 해결 방법이 있습니다.

1. 오버로드 도우미 함수:

지정된 다양한 인수 집합으로 오버로드 함수를 만들고 추론에 가장 구체적인 오버로드를 사용합니다.

<code class="cpp">template<class T, class U>
void func(Base<T, U> val) { }

template<class T>
void func(Base<T, double> val) { }

template<>
void func(Base<double> val) { }</code>
로그인 후 복사

2. 명시적 인수 추론:

다른 인수를 추론하는 동안 특정 인수를 지정하려면 명시적 템플릿 인수 추론을 사용하세요.

<code class="cpp">Base val(1, static_cast<double>(4.), false);</code>
로그인 후 복사

3. 가변 템플릿 활용:

여러 인수를 허용하고 템플릿 인수를 추론할 수 있는 가변 템플릿 생성:

<code class="cpp">template<typename... Args>
class Base {
public:
    Base(Args&&... args) {
        // Custom logic to deduce template arguments from args...
    }
};</code>
로그인 후 복사

결론:

C 17에서는 부분 클래스 템플릿 인수 추론이 직접 지원되지 않습니다. 그러나 함수 오버로딩, 명시적 추론 또는 가변 템플릿과 같은 해결 방법을 사용하면 유사한 효과를 얻을 수 있습니다.

위 내용은 ## C 17의 클래스 템플릿에 대한 템플릿 인수를 부분적으로 추론할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿