2016-06-17 6 views
5

क्यूटी डॉक्स में यह कहा गया है कि एक qreal एककैसे एक qreal शाब्दिक

डबल के लिए typedef है, जब तक क्यूटी -qreal नाव विकल्प के साथ कॉन्फ़िगर किया गया है परिभाषित करने के लिए।

इसका मूल रूप से लगभग double लेकिन float एआरएम उपकरणों पर इसका मतलब है।

मैं qreal अक्षरों का उपयोग करना चाहता हूं हालांकि मुझे नहीं पता कि उन्हें कैसे लिखना है।

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

कहाँ 0.0 एक double शाब्दिक और 0.0f है एक float शाब्दिक होगा। एआरएम पर यह एक संकलन arror है क्योंकि qMin(float, double) फ़ंक्शन नहीं है।

मैं static_cast<qreal>(0.0) लिख सकता था लेकिन यह अत्यधिक वर्बोज़ लगता है।

तो मैं qreal शाब्दिक कैसे परिभाषित करूं?

+0

क्या साथ समस्या है 'qreal value = 1.234'? कंपाइलर को सभी रूपांतरणों को संभालना चाहिए, स्पष्ट कलाकारों की आवश्यकता नहीं है। –

+0

@ karstenKoop मैंने समस्या को स्पष्ट करने के लिए प्रश्न में उदाहरण कोड संशोधित किया है। – Troyseph

+0

आप एक सी ++ 11 उपयोगकर्ता परिभाषित शाब्दिक परिभाषित कर सकते हैं जो qreal लौटाएगा। – Velkan

उत्तर

3

आप उपयोग कर सकते हैं सी ++ 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); 
} 

यदि वे आपके प्लेटफ़ॉर्म पर उपलब्ध नहीं हैं, तो आप स्पष्ट रूप से qreals निर्माण कर सकते हैं:

using _qr = qreal; 

int main() { 
    qreal a = _qr(3.0); 
    Q_ASSERT(qMin(a, _qr(4.0)) == a); 
} 
संबंधित मुद्दे