패킹된 가변 템플릿 인수 목록 반복
C에서 압축된 가변 템플릿 인수 목록을 반복하는 것은 컴파일 타임 리플렉션 능력. 그러나 이 작업을 처리할 수 있는 기술이 있습니다.
문제 이해
목표는 템플릿 인수 팩을 반복하여 특정 데이터를 추출하는 것입니다. 유형(예: int, char*, float)을 사용하여 별도의 벡터에 저장합니다. 또한 인수가 나타나는 순서를 추적하려면 벡터가 필요합니다.
해법 접근
람다에서 접기 표현식 사용:
혼합 유형 입력의 경우 C 17 접기 표현식을 람다 표현식과 함께 사용할 수 있습니다. 람다는 루프 동작을 캡슐화하여 카운터를 증가시키고 각 입력의 값을 해당 위치와 함께 인쇄합니다.
<code class="cpp">template<class ... Ts> void Foo(Ts && ... inputs) { int i = 0; ([&]() { ++i; std::cout << "input " << i << " = " << inputs << std::endl; }(), ...); }
Return/Break 문 처리:
If return 또는 루프 내에 break 문이 필요하면 해결 방법을 구현할 수 있습니다.
사용자 정의 매크로 접근 방식:
대체 접근 방식은 반환/중단 문을 구성하는 사용자 정의 매크로를 생성하는 것입니다. 모든 인수를 보유하고 이를 벡터 내부로 확장합니다. 이는 비표준 방법이지만 원하는 기능을 얻을 수 있습니다.
<code class="cpp">struct any { void do_i(int e) { INT = e; } void do_f(float e) { FLOAT = e; } void do_s(char* e) { STRING = e; } int INT; float FLOAT; char* STRING; }; #define def(name) \ template<typename... T> \ auto name(T... argv) -> any { \ std::initializer_list<any> argin = { argv... }; \ std::vector<any> args = argin; #define get(name, T) get<T>()(args[name]) #define end }</code>
이 접근 방식에서는 arg() 함수를 수동으로 호출하여 각 인수에 대한 인스턴스를 생성해야 합니다.
결론
C에서 압축된 가변 템플릿 인수 목록을 반복하려면 혁신적인 솔루션이 필요합니다. 여기에서 설명하는 접근 방식은 이러한 문제를 해결하여 이식성과 플랫폼 간 호환성을 유지하면서 혼합 유형 인수를 효율적으로 처리할 수 있도록 합니다.
위 내용은 C에서 압축된 Variadic 템플릿 인수 목록을 반복하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!