>백엔드 개발 >C++ >Variadic 템플릿 함수에서 `std::source_location`을 사용하는 방법은 무엇입니까?

Variadic 템플릿 함수에서 `std::source_location`을 사용하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-30 19:08:451072검색

How to Use `std::source_location` in Variadic Template Functions?

가변 템플릿 함수에서 std::source_location 사용

가변 템플릿에서 컨텍스트 정보를 캡처하기 위해 C 20 기능 std::source_location을 활용하는 경우 함수의 경우 source_location 매개변수를 어디에 배치할지 결정하는 데 문제가 발생합니다.

실패한 시도

잘못된 시도에는 다음이 포함됩니다.

  • 끝의 가변 매개변수:

    <code class="cpp">template<typename... Args>
    void debug(Args&&... args, const std::source_location& loc = std::source_location::current());</code>

가변 매개변수가 끝에 있어야 하기 때문에 실패합니다.

  • 매개변수 삽입:

    <code class="cpp">template<typename... Args>
    void debug(const std::source_location& loc = std::source_location::current(),
    Args&&... args);</code>

이는 호출자를 혼란스럽게 하며 일반 인수(예: debug(42);)를 전달할 때 오류가 발생합니다.

해결책: 추론 가이드

첫 번째 양식에 추론 가이드를 추가하면 문제를 해결할 수 있습니다.

<code class="cpp">template<typename... Ts>
struct debug
{
    debug(Ts&&... ts, const std::source_location& loc = std::source_location::current());
};

template<typename... Ts>
debug(Ts&&...) -> debug<Ts...>;</code>

이 추론 가이드는 템플릿 매개변수를 기반으로 추론합니다. 함수 인수에서 source_location 매개변수를 끝에 배치할 수 있습니다.

테스트 및 데모

<code class="cpp">int main()
{
    debug(5, 'A', 3.14f, "foo");
}</code>

라이브 데모: https://godbolt.org /z/n9Wpo9Wrj

위 내용은 Variadic 템플릿 함수에서 `std::source_location`을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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