"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C++11에서 함수 앨리어싱이 가능합니까?

C++11에서 함수 앨리어싱이 가능합니까?

2024년 11월 10일에 게시됨
검색:916

Is Function Aliasing Possible in C  11?

C 11: 함수 별칭

C에서는 using 키워드를 사용하여 클래스에 대한 별칭을 만들 수 있습니다. 그러나 동일한 기능을 함수에 직접 사용할 수는 없습니다. 이 문서에서는 함수 앨리어싱이 가능한지 여부에 대한 질문을 살펴보고 완벽한 전달을 사용하는 솔루션을 제공합니다.

목표:
에서 함수에 대한 별칭을 만드는 것이 가능한지 확인하려면 C, 그렇다면 이를 달성하기 위한 가장 깔끔한 방법을 찾으십시오.

문제 설명:
다음 코드를 고려하십시오:

namespace bar
{
    void f();
}

bar::f 함수에 대해 g라는 별칭을 만들고 싶습니다. 그러나 다음 시도에서는 오류가 발생합니다.

using g = bar::f; // error: ‘f’ in namespace ‘bar’ does not name a type

해결책:
함수 별칭을 생성하려면 템플릿과 완벽한 전달의 조합을 사용할 수 있습니다. . 다음은 이를 달성하는 방법에 대한 예입니다.

template 
auto g(Args&&... args) -> decltype(f(std::forward(args)...)) {
  return f(std::forward(args)...);
}

이 솔루션은 임의 개수의 인수를 취하는 일반 템플릿 함수를 생성하여 작동합니다. 그런 다음 완벽한 전달을 사용하여 이러한 인수를 원래 함수 f로 전달합니다. 이렇게 하면 별칭에 적용될 수 있는 유형 변환이나 포인터 역참조에 관계없이 호출된 함수가 원래 형식으로 인수를 수신하게 됩니다.

참고:
이 솔루션 또한 오버로드된 함수 및 함수 템플릿에도 작동하여 제공된 인수에 따라 올바른 함수가 호출되도록 합니다.

릴리스 선언문 이 글은 1729666346에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3