本文的灵感来自于C++模板元编程技术与应用,里面讲到“
1994年,在圣迭哥举行的一次C++标准委员会会议期间,
Erwin Unruh展示了一段特别的代码,可以在编译期以编译
错误信息的方式产生从2到某个给定值之间的所有质数。
”
所以自己用一下午的时间做了一个实现,代码如下:
#include <iostream>
using namespace std;
/*声明一个质数检查器模板
**
**i :需要被检查的数字
**factor :正在用于测试i的因数
**isPrime :之前的测试是否通过,即在测试factor之前,i是否是质数
*/
template<int i,int factor,bool isPrime>
struct PrimeChecker;
template<int i,int factor>
struct PrimeChecker<i,factor,true>{
enum{Result=PrimeChecker<i,factor-1,i%factor!=0>::Result};
};
template<int i,int factor>
struct PrimeChecker<i,factor,false>{
enum{Result=false};
};
template<int i>
struct PrimeChecker<