[陶大妈醒目][c++11] 类似泛型 for_each 算法的 variadic template 实现
经常遇到多个类似算法,但是参数数量不一样的,我都是直接 overload 掉了
比如 for_each
- C/C++ code
template<typename II1, typename F> F for_each( II1 _ii1, II1 ii1_, F f ) { while ( _ii1 != ii1_ ) { f( *_ii1++ ); } return f; } template<typename II1, typename II2, typename F> F for_each( II1 _ii1, II1 ii1_, II2 _ii2, F f ) { while ( _ii1 != ii1_ ) { f( *_ii1++, *_ii2++ ); } return f; } template<typename II1, typename II2, typename II3, typename F> F for_each( II1 _ii1, II1 ii1_, II2 _ii2, II3 _ii3, F f ) { while ( _ii1 != ii1_ ) { f( *_ii1++, *_ii2++, *_ii3++ ); } return f; } template<typename II1, typename II2, typename II3, typename II4, typename F> F for_each( II1 _ii1, II1 ii1_, II2 _ii2, II3 _ii3, II4 _ii4, F f ) { while ( _ii1 != ii1_ ) { f( *_ii1++, *_ii2++, *_ii3++, *_ii4++ ); } return f; }现在问题是,是否存在一种方法,使用 Variadic Templates 技术使得 for_each 直接接受 N 个参数而不用写出多个重载?
比如这种形式
- C/C++ code
template<typename II1, typename... IIN, typename F> F for_each( II1 _ii1, II1 ii1_, IIN... _iin, F f );
尝试了几次没有成功,主要难点在 *_iin 的展开递归上,不知各位有何高见?
[解决办法]
我是来学习的。对于C++0X11你们是从哪里学来的?有什么教程推荐下么??