如何确定C ++中的数字是否复杂?
是否有这样的内置功能?:
isComplex(1)->false
答案 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。
对于更复杂的功能,您可能希望为例如创建单独的重载。 double
和std::complex<double>
,和/或float
和std::complex<float>
,long double
等。