C 11: 함수 별칭
C에서는 using 키워드를 사용하여 클래스의 별칭을 만들 수 있습니다. 그러나 동일한 기능을 함수에 직접 사용할 수는 없습니다. 이 기사에서는 함수 앨리어싱이 가능한지 여부에 대한 질문을 살펴보고 완벽한 전달을 사용하여 솔루션을 제공합니다.
목표:
에서 함수에 대한 별칭을 생성할 수 있는지 확인합니다. C 그리고 그렇다면 이를 달성하기 위한 가장 깔끔한 방법을 찾으십시오.
문제 설명:
다음 코드를 고려하십시오.
<code class="cpp">namespace bar { void f(); }</code>
우리는 bar::f 함수에 대해 g라는 별칭을 만듭니다. 그러나 다음 시도에서는 오류가 발생합니다.
<code class="cpp">using g = bar::f; // error: ‘f’ in namespace ‘bar’ does not name a type</code>
해결책:
함수 별칭을 생성하려면 템플릿과 완벽한 전달의 조합을 사용할 수 있습니다. 다음은 이를 달성할 수 있는 방법의 예입니다.
<code class="cpp">template <typename... Args> auto g(Args&&... args) -> decltype(f(std::forward<Args>(args)...)) { return f(std::forward<Args>(args)...); }</code>
이 솔루션은 임의 개수의 인수를 취하는 일반 템플릿 함수를 생성하여 작동합니다. 그런 다음 완벽한 전달을 사용하여 이러한 인수를 원래 함수 f로 전달합니다. 이렇게 하면 별칭에 적용될 수 있는 유형 변환이나 포인터 역참조에 관계없이 호출된 함수가 원래 형식으로 인수를 수신하게 됩니다.
참고:
이 솔루션 또한 오버로드된 함수 및 함수 템플릿에도 작동하여 제공된 인수에 따라 올바른 함수가 호출되도록 합니다.
위 내용은 C 11에서 함수 앨리어싱이 가능합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!