确定数字是否是复杂的C ++

时间:2014-11-17 07:03:50

标签: c++ complex-numbers

如何确定C ++中的数字是否复杂?

是否有这样的内置功能?:

isComplex(1)->false

1 个答案:

答案 0 :(得分:1)

C ++是一种强类型语言,文字1始终是int

在转换文字时,您询问的决定可能是相关的... isComplex("1"),因为您可以尝试直播:

std::istringstream iss(some_text);
std::complex<double> my_complex;
char c;
if (iss >> my_complex &&  // conversion possible...
    !(iss >> c))          // no unconverted non-whitespace characters afterwards
    ...use my_complex...
else
    throw std::runtime_error("input was not a valid complex number");

另外,如果您在模板中并且不确定类型参数是否为std::complex,则可以使用例如std::is_same<T, std::is_complex<double>>::value,例如:

#include <iostream>
#include <complex>
#include <type_traits>

using namespace std;

double get_real(double n) { return n; }

double get_real(const std::complex<double>& n) { return n.real(); }

template <typename T>
std::complex<double> f(T n)
{
    if (std::is_same<T, std::complex<double>>::value)
        return n * std::complex<double>{1, -1} + get_real(n);
    else
        return -n;
}


int main()
{
    std::cout << f(std::complex<double>{10, 10}) << '\n';
    std::cout << f(10.0) << '\n';
}

输出:

(30,0)
(-10,0)

请参阅代码here

对于更复杂的功能,您可能希望为例如创建单独的重载。 doublestd::complex<double>,和/或floatstd::complex<float>long double等。