编译期循环执行的代码
使用模板元编程进行递归编写,来实现编译期代码循环执行
例:给定一个无符号整数(unsigned int),求该整数对应的二进制数中有几个1
#include <iostream> template <size_t input> constexpr size_t onesCount = (input % 2) + onesCount<(input / 2)>; template <> constexpr size_t onesCount<0> = 0; int main() { constexpr size_t res = onesCount<45>; std::cout << res << std::endl; }
也可以使用这种写法结合变参模板来处理数组
如下数组求和的程序
#include <iostream> template <size_t...input> constexpr size_t accumulate = 0; template <size_t cur_input, size_t...input> constexpr size_t accumulate<cur_input, input...> = cur_input + accumulate<input...>; int main() { constexpr size_t res = accumulate<1, 2, 3, 4, 5>; std::cout << res << std::endl; }
当模板参数个数大于0时,都会执行特化的模板,当模板参数为空时,执行上面的模板返回0,结束递归
无情的摸鱼机器