패킹된 가변 템플릿 인수 목록을 반복하는 방법
C에서 압축된 가변 템플릿 인수 목록을 반복하는 것은 다음으로 인해 문제가 발생합니다. 인수의 수를 알 수 없고 개별적으로 데이터를 검색할 수 없습니다. 이 문제는 재귀 호출을 방지하는 함수 구성 시 매크로를 사용함으로써 더욱 복잡해집니다.
이 문제를 해결하기 위해 제공된 솔루션은 다양한 유형의 데이터를 보유할 수 있는 사용자 정의 유형인 any를 사용합니다. 이 유형을 가변 템플릿에 전달하면 인수가 모든 객체의 벡터로 확장됩니다. 그 후, 이 벡터의 개별 요소는 특수한 getter 함수(get
이 메서드가 작업을 수행하는 동안에는 다음이 필요합니다. foo(arg(1000))와 같은 자세한 함수 호출. 이를 단순화하기 위해 우리는 압축된 가변 템플릿 인수 목록에 대해 보다 간결한 반복 방법이나 std::get()과 동등한 방법을 찾습니다.
STL 접기 표현식 및 람다를 사용하는 솔루션
C 17 이상의 경우 접기 표현식을 람다 함수와 함께 활용하여 반복을 달성할 수 있습니다. 람다는 카운터 증가 및 현재 인수 인쇄를 포함하여 루프 내에서 임의의 작업을 수행할 수 있습니다.
template
void Foo (Ts && ... inputs)
{
int i = 0;
([&]
{
// Do things in your "loop" lambda
i;
std::cout << "input " << i << " = " << inputs << std::endl;
} (), ...);
}
이 방법은 더욱 간결하고 읽기 쉬운 반복 메커니즘을 제공합니다.
루프 중단 처리를 위한 대안
앞서 언급한 솔루션이 작업을 수행하는 동안, 루프 내에서 중단 또는 반환을 구현하는 기능이 부족합니다. 이 문제를 해결하기 위해 다음과 같은 해결 방법을 활용할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3