- 정확히 어떻게 작동합니까? 변수 언 패킹은 어떻게 그 함수가 variadic 템플릿의 각 매개 변수에 대해 실행되도록 허용합니까?
파라미터 팩 확장 그래서 ...
expr(T)...
뒤에 파라미터 팩을 포함하는 일부 패턴은 그 패턴 expr(T)
와 팩 확장이며, 파라미터 팩 각 Ti
위한 expr(T0), expr(T1), expr(T2), ..., expr(TN)
로 확장 .
팩 확장은 인수 목록 또는 이니셜 라이저 목록과 같은 특정 컨텍스트에서만 사용할 수 있습니다.이 경우 각 하위 표현식의 결과는 배열 int _[]
의 초기화 목록을 구성하는 데 사용됩니다. 배열은 사용되지 않고 팩 확장을 수행 할 컨텍스트로 이니셜 라이저를 사용할 수 있도록 존재합니다. 각 하위 식의 형식은 (SubscribeToType<Ti>(blah, blah), 0)
입니다. 이는 함수 호출의 결과가 무시되고 식의 값이 0임을 의미합니다. 팩 확장을 통해 N 개의 정수가 포함 된 브레이싱 된 -init-list를 생성 할 수 있습니다. 이것이 배열을 초기화하는 데 필요하기 때문입니다.
- 나는이 라인이 람다로 대체 될 수 있다고 확신한다. 어떻게 선을 람다 식으로 대체 할 수 있습니까?
왜 하시겠습니까?
람다에서 매우 비슷한 팩 확장이 필요할 수 있으므로 아무 것도 단순화하지 않습니다.
# 2 점을 지적하기 위해 int 배열의 초기화 프로그램을 사용하는 것이 'hack'ish이고 매우 깨끗하지는 않습니다. 나는 param 팩을 반복하는 lambda가 매우 깨끗하고 독자에게 명확 할 것이라고 생각했다. – Frank
팩에 대해 "반복"하시겠습니까?실제로는 람다에게 전달할 수있는 인수 팩이 없다는 것을 명심하십시오. 배열은 hackish하지만 단지 "람다 사용하기"는 더 멋진 솔루션을 제공하지 않습니다 (또는 어떤 솔루션이라도) ;-) –
당신 말이 맞아요, 나는 그저 깨끗한 해결책이 있었음에 틀림 없다고 생각했습니다. 팩의 각 매개 변수에 대한 함수 호출을 실행하는 것을 알지 못했습니다. 나는 이제 안다 :) – Frank