如何定义一个qreal文字

Tro*_*eph 6 qt literals

在Qt文档中,它说a qreal是a

除非使用-qreal float选项配置Qt,否则键入为double.

这基本上意味着几乎总是double,但float在ARM设备.

我想使用qreal文字,但我不知道如何编写它们.

qreal someValue = calcFunc();
qreal min = qMin(someValue, 0.0);
Run Code Online (Sandbox Code Playgroud)

哪里0.0double文字和0.0f将是一个float文字.在ARM上,这是一个编译错误,因为没有qMin(float, double)函数.

我可以写,static_cast<qreal>(0.0)但这似乎过于冗长.

那么我该如何定义qreal文字呢?

Rei*_*ica 4

您可以使用 C++11用户定义的文字

#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);
}
Run Code Online (Sandbox Code Playgroud)

如果它们在您的平台上不可用,您可以在需要时显式构造 qreals:

using _qr  = qreal;

int main() {
   qreal a = _qr(3.0);
   Q_ASSERT(qMin(a, _qr(4.0)) == a);
}
Run Code Online (Sandbox Code Playgroud)