如何定义 qreal 文字
How to define a qreal literal
在 Qt 文档中它说 qreal
是
Typedef for double unless Qt is configured with the -qreal float option.
这基本上意味着几乎总是 double
但在 ARM 设备上 float
。
我想使用 qreal
文字,但是我不知道怎么写。
qreal someValue = calcFunc();
qreal min = qMin(someValue, 0.0);
其中 0.0
是 double
文字,0.0f
是 float
文字。在 ARM 上,这是一个编译错误,因为没有 qMin(float, double)
函数。
我可以写 static_cast<qreal>(0.0)
但这似乎过于冗长。
那么如何定义 qreal
文字?
你可以使用 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);
}
如果它们在您的平台上不可用,您可以在需要时显式构建 qreals:
using _qr = qreal;
int main() {
qreal a = _qr(3.0);
Q_ASSERT(qMin(a, _qr(4.0)) == a);
}
在 Qt 文档中它说 qreal
是
Typedef for double unless Qt is configured with the -qreal float option.
这基本上意味着几乎总是 double
但在 ARM 设备上 float
。
我想使用 qreal
文字,但是我不知道怎么写。
qreal someValue = calcFunc();
qreal min = qMin(someValue, 0.0);
其中 0.0
是 double
文字,0.0f
是 float
文字。在 ARM 上,这是一个编译错误,因为没有 qMin(float, double)
函数。
我可以写 static_cast<qreal>(0.0)
但这似乎过于冗长。
那么如何定义 qreal
文字?
你可以使用 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);
}
如果它们在您的平台上不可用,您可以在需要时显式构建 qreals:
using _qr = qreal;
int main() {
qreal a = _qr(3.0);
Q_ASSERT(qMin(a, _qr(4.0)) == a);
}