返回类型基于输入参数的值

OSE*_*OSE 2 c++ decltype c++11

在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));
    }
}
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 5

不,这是不可能的.

类型是编译时构造,并且函数的类型在编译时是固定的.

如果将参数作为constexpr"常量表达式"提供,那么您可能已经使用模板来解决问题.但是,对于动态输入,这根本不可能.