从数学,算法和元编程递归的角度来看,我有一个具有挑战性的问题.请考虑以下声明:
template<class R1, class R2>
using ratio_power = /* to be defined */;
Run Code Online (Sandbox Code Playgroud)
基于std::ratio类似操作的例子std::ratio_add.给定,两个std::ratio R1和R2此操作应该计算R1^R2if和only if R1^R2是否为有理数.如果它是不合理的,那么实现应该失败,就像当一个人尝试将两个非常大的比率相乘并且编译器说存在整数溢出时.
三个问题:
是否可以使用具有以下签名的元函数计算整数的平方根:
template<unsigned int N> inline double sqrt();
Run Code Online (Sandbox Code Playgroud)
(或者可能使用constexpr关键字,我不知道什么是最好的).有了它,sqrt<2>()将1.414...在编译时替换.
什么是这种功能的最佳实现?