> 백엔드 개발 > C++ > C에서 템플릿 매개변수로 \'auto\'를 사용할 수 있습니까?

C에서 템플릿 매개변수로 \'auto\'를 사용할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-11-04 15:42:01
원래의
404명이 탐색했습니다.

Can We Use

템플릿 매개변수의 자동 키워드: 타당성 및 현재 제한 평가

C에서는 템플릿 매개변수 내에서 철저한 유형 인스턴스화를 허용하지만, 템플릿 매개변수는 "auto" 키워드를 사용하여 명시적으로 선언할 수 있습니다. 이렇게 하면 특히 멤버 함수에 대한 포인터와 같은 복잡한 유형의 경우 인수 유형을 수동으로 지정할 필요가 없어 컴파일 시간 편의성이 크게 향상됩니다.

현재 제한 사항

이러한 기능의 매력에도 불구하고 현재 C 언어에서는 불가능합니다. 제공된 코드 예제에서는 "auto"를 사용하여 템플릿 매개 변수를 정의하려고 시도하지만 컴파일러는 기존 구문을 엄격하게 적용하여 템플릿 매개 변수 내에서 명시적인 유형 선언을 요구합니다.

해결 방법

이 제한 사항에 대한 직접적인 해결책은 아직 찾기 어렵지만 인수 전달을 단순화할 수 있는 실행 가능한 해결 방법이 있습니다.

  • 매크로: 매크로를 사용하면 올바른 인수 유형을 자동으로 생성할 수 있습니다. 예를 들어, "AUTO_ARG" 매크로는 다음과 같이 정의될 수 있습니다:
<code class="cpp">#define AUTO_ARG(x) decltype(x), x</code>
로그인 후 복사

이 매크로는 다음과 같이 활용될 수 있습니다:

<code class="cpp">f.bar<AUTO_ARG(5)>();
f.bar<AUTO_ARG(&Baz::bang)>();</code>
로그인 후 복사
  • 생성기 구문: 또는 생성기 함수를 사용하여 원하는 유형을 추론하고 구성할 수 있습니다. 예:
<code class="cpp">template <typename T>
struct foo {
    foo(const T& x) {} // do whatever
};

template <typename T>
foo<T> make_foo(const T& x) {
    return foo<T>(x);
}</code>
로그인 후 복사

이 생성기 함수를 사용하면 인수 전달이 단순화됩니다.

<code class="cpp">make_foo(5);
make_foo(&Baz::bang);</code>
로그인 후 복사

향후 고려 사항

이러한 해결 방법은 실용적인 솔루션을 제공하더라도 템플릿 매개변수 내에 "auto" 키워드를 포함하는 것은 여전히 ​​향후 C 버전의 잠재적인 개선 사항으로 간주될 수 있습니다.

위 내용은 C에서 템플릿 매개변수로 \'auto\'를 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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