가변 템플릿 함수에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!