패킹된 가변 템플릿 인수 목록을 반복하는 방법
C에서 압축된 가변 템플릿 인수 목록을 반복하는 것은 다음으로 인해 문제가 발생합니다. 인수의 수를 알 수 없고 개별적으로 데이터를 검색할 수 없습니다. 이 문제는 재귀 호출을 방지하는 함수 구성 시 매크로를 사용함으로써 더욱 복잡해집니다.
이 문제를 해결하기 위해 제공된 솔루션은 다양한 유형의 데이터를 보유할 수 있는 사용자 정의 유형인 any를 사용합니다. 이 유형을 가변 템플릿에 전달하면 인수가 모든 객체의 벡터로 확장됩니다. 이후에 특수한 getter 함수(get
이 방법으로 작업을 수행하는 동안에는 다음이 필요합니다. foo(arg(1000))와 같은 자세한 함수 호출. 이를 단순화하기 위해 우리는 압축된 가변 템플릿 인수 목록에 대해 보다 간결한 반복 방법이나 std::get()과 동등한 방법을 찾습니다.
STL Fold Expressions 및 Lambda를 사용한 솔루션
C 17 이상의 경우 접기 표현식을 람다 함수와 함께 활용하여 반복을 달성할 수 있습니다. 람다는 카운터 증가 및 현재 인수 인쇄를 포함하여 루프 내에서 임의의 작업을 수행할 수 있습니다.
<code class="cpp">template <class ... ts> void Foo (Ts && ... inputs) { int i = 0; ([&] { // Do things in your "loop" lambda ++i; std::cout <p>이 방법은 더욱 간결하고 읽기 쉬운 반복 메커니즘을 제공합니다.</p> <p><strong>대안 루프 중단 처리</strong></p> <p>앞서 언급한 솔루션은 작업을 수행하지만 루프 내에서 중단 또는 반환을 구현하는 기능이 부족합니다. 이 문제를 해결하기 위해 다음과 같은 해결 방법을 활용할 수 있습니다.</p> <ul> <li> <strong>try/throw 사용:</strong> 이 접근 방식에서는 람다 내에서 예외를 발생시켜 루프를 벗어날 수 있습니다. 그러나 이 방법은 예외 오버헤드로 인해 성능에 큰 영향을 미칠 수 있습니다.</li> <li> <strong>변수/if 스위치:</strong> 이 방법에는 루프를 제어하기 위한 변수를 생성하고 if 문을 사용하여 루프를 중단하는 작업이 포함됩니다. 루프. 효과적이기는 하지만 미적으로 덜 만족스러운 코드로 이어질 수 있습니다.</li> </ul></class></code>
위 내용은 압축된 Variadic 템플릿 인수 목록을 간결하게 반복하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!