的值在C++ 11返回类型为有实施sqrt
函数,对于正的和负double
输入值的工作原理的方法吗?如果输入是负值,我希望返回类型为std::complex<double>
,如果是正值,我想返回类型为double
。我意识到简单的解决方案是总是返回std::complex<double>
,但这不是我所期待的。基于输入参数
下面我有我的第一次尝试的例子,但是这不会编译由于a
在返回类型存在:
inline decltype((a > 0)?(double):(std::complex<double>)) sqrt(const double& a)
{
if(a > 0)
{
return std::sqrt(a);
}
else
{
return ((std::complex<double>(0.0,1.0))*std::sqrt(-a));
}
}
另外,我有这个功能在命名空间,以避免与'std'碰撞。 – OSE
声明它作为'嵌入汽车的sqrt(const的双&A) - > decltype(?(A> 0)(双层):(的std ::复杂))'应该工作。 –
@LoganMurphy好点。我应该改变'std :: sqrt()'。 – OSE