"How to properly use references with variadic templates"을보고 있었는데 쉼표 확장이 얼마나 멀리 갈 수 있는지 궁금했습니다.가변적 인 확장을 쉼표로 연산자 호출 체인으로 사용할 수 있습니까?
여기 답의 변형입니다 :
inline void inc() { }
template<typename T,typename ...Args>
inline void inc(T& t, Args& ...args) { ++t; inc(args...); }
가변 인수가 요소의 쉼표으로 단락 지어진리스트로 확장되기 때문에, 그 쉼표 의미 템플릿/함수 인수 구분에 해당합니다, 또는 어휘로이 삽입되어 쉼표 연산자를 포함한 모든 (사후 전 처리기) 사용에 적합합니까?
이 내 GCC-4.6에서 작동 :
// Use the same zero-argument "inc"
template<typename T,typename ...Args>
inline void inc(T& t, Args& ...args) { ++t, inc(args...); }
을하지만 시도 할 때 :
// Use the same zero-argument "inc"
template<typename T,typename ...Args>
inline void inc(T& t, Args& ...args) { ++t, ++args...; }
내가 기대, 구문 분석 오류를 받고 보관 ";" "..."앞에 있고, "args"는 팩을 확장하지 않을 것입니다. 왜 작동하지 않습니까? "args"가 비어 있으면 잘못된 구두점을 얻을 수 있기 때문입니까? 그것은 합법적입니까, 제 컴파일러는 충분하지 않습니까?
(I는 "인수"괄호를 둘러싼 시도하지, 및/또는 후행 증가를 사용했습니다;. 둘 다 일)
는 가변 인자 템플릿 매개 변수와 연산자 +를 정의 않았다 일부
operator++
는 반환 형식void
을 가지고있을 때, 귀하의 경우 유용 할 수 있습니다? –가변 템플릿에 대한 위키 백과 문서를 참조하십시오. 언젠가 나는 기사에 그런 확장에 몇몇 기술을 추가했다. –