2016-06-17 33 views
5

W docs Qt to mówi, że qreal jestJak zdefiniować qreal dosłownego

typedef dla podwójnej chyba Qt jest skonfigurowany z opcją pływaka -qreal.

W zasadzie oznacza to prawie zawsze double, ale float na urządzeniach ARM.

Chcę używać literałów qreal, ale nie wiem, jak je napisać.

qreal someValue = calcFunc(); 
qreal min = qMin(someValue, 0.0); 

Gdzie 0.0 jest double dosłowny i 0.0f byłoby float dosłowne. W ARM jest to kompilacja, ponieważ nie ma funkcji qMin(float, double).

Mogę napisać static_cast<qreal>(0.0), ale wydaje się to zbyt szczegółowe.

Jak zdefiniować literał literowy qreal?

+0

czym problem z 'wartość qreal = 1.234'? Kompilator powinien obsługiwać wszystkie konwersje, bez potrzeby jawnego rzutowania. –

+0

@KarstenKoop Zmodyfikowałem kod przykładowy w pytaniu, aby problem był jaśniejszy. – Troyseph

+0

Możesz zdefiniować literał zdefiniowany przez użytkownika C++ 11, który zwróci wartość qreal. – Velkan

Odpowiedz

3

Można używać C++ 11 user defined literals:

#include <QtCore> 

constexpr qreal operator "" _qr(long double a){ return qreal(a); } 

int main() { 
    qreal a = 3.0_qr; 
    Q_ASSERT(qMin(a, 4.0_qr) == a); 
} 

Jeśli nie są one dostępne na platformie, można jawnie konstruować qreals kiedy ich potrzebujesz:

using _qr = qreal; 

int main() { 
    qreal a = _qr(3.0); 
    Q_ASSERT(qMin(a, _qr(4.0)) == a); 
}