#include<iostream>
using namespace std;
template<bool N, typename left, typename right>
class IfThenElse;
template<typename left, typename right>
class IfThenElse<true, left,right>{
public:
typedef left ResultT;
};
template<typename left, typename right>
class IfThenElse<false, left, right> {
public:
typedef right ResultT;
};
template<int N,int Lo=0,int Hi=N>
class Sqrt
{
public:
enum{mid=(Lo+Hi+1)/2};
// typedef typename IfThenElse<(N < mid* mid), Sqrt<N, Lo, mid - 1>, Sqrt<N, mid, Hi>>::ResultT RsT;
using Rst = typename IfThenElse<(N < mid* mid), Sqrt<N, Lo, mid - 1>, Sqrt<N, mid, Hi>>::ResultT;
enum{result= Rst::result};
};
template<int N,int s>
class Sqrt<N, s, s>
{
public:
enum { result = s };
};
int main()
{
cout << Sqrt<16>::result << endl;
return 0;
}
C++ metaprogram实现编译期计算平方根
最新推荐文章于 2021-09-19 10:06:10 发布