我希望在某些情况下使用cmath
库中的std::pow
实现,在其他情况下,我想使用myspace::pow
。
namespace myspace
{
template <typename T>
T pow(T val, unsigned exp)
{
if (exp == 0) return 1;
return val*pow(val,exp-1);
}
}
不同的情况由模板参数确定。
template <typename T>
void myFunction()
{
auto val = pow(2.1,3);
/* ... */
}
如果
T == double
,我希望使用 std::pow
计算 val
。如果 T == mydouble
,我希望使用 myspace::pow
计算 val
。现在,我有很多像这样的代码行:auto val = pow(2.1,3);
,我想避免每行代码都检查 T
的类型。struct mydouble { /* ... */ };
myFunction<double>(); // uses std::pow
myFunction<mydouble>(); // uses myspace::pow
我已经为此烦恼了很长时间,但是我找不到解决办法。有什么建议吗?
pow
写成mydouble pow(mydouble val, unsigned exp) ...
(在mydouble
所在的相同命名空间中执行此操作),一切都应该完美地工作。 - Max Langhof