【发布时间】:2013-08-07 23:30:34
【问题描述】:
在 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发生冲突。 -
将其声明为
inline auto sqrt(const double& a) -> decltype((a > 0)?(double):(std::complex<double>))应该可以。 -
@pwny,不,不应该。
-
类型是编译时的,函数参数是运行时的。看到问题了吗?
-
@user814628:使用模板专业化在这里没有帮助。您仍然坚持尝试根据直到运行时才知道的值推断类型(在编译时发生)。