Комплексные числа в c++

У меня есть функция типа complex, которая возвращает комплексное число. Я хочу вывести результат в виджет Qlabel, однако метод setNum этого не позволяет. Как вывести комплексное число в Qlabel?


Ответы (1 шт):

Автор решения: KoVadim

напишем вот такую страшную функцию

template<typename T>
std::string to_string(std::complex<T> n)
{
    return std::to_string(n.real()) + ((n.imag()>=0)?"+":"") + std::to_string(n.imag()) + "i";
}

(ее можно упростить, но это пусть будет домашнее задание)

И теперь можно писать вот так

std::complex<double> z1 = 1-1i;
std::string zs = to_string(z1);

А потом использовать label1.setText(...)

Правда лучше будет переделать исходную функцию на QString

template<typename T>
QString to_string(std::complex<T> n)
{
    return QString(n.real()) + ((n.imag()>=0)?"+":"") + QString(n.imag()) + "i";
}

Если же хочется вывода как в стандартной библиотеке (в виде (1,-3) ), то это даже проще

template<typename T>
QString to_string(std::complex<T> n)
{
    return QString("(%1,%2)").arg(n.real()).arg(n.imag());
}

P.S. А почему шаблоны? да просто сам тип комплексного числа также шаблонный и что бы не писать на каждый возможный тип свою функцию, воспользуемся шаблонами.

→ Ссылка