我正在使用班级CPoint
。我正在尝试并成功地在CPoint
的构造函数中传递双精度数。经过一些测试后,我发现CPoint
将其值保持为LONG
,根据定义,定义为typedef long LONG;
这对我们的帮助太大了。但在审核了CPoint
构造函数
// create an uninitialized point
CPoint() throw();
// create from two integers
CPoint(int initX, int initY) throw();
// create from another point
CPoint(POINT initPt) throw();
// create from a size
CPoint(SIZE initSize) throw();
// create from an LPARAM: x = LOWORD(dw) y = HIWORD(dw)
CPoint(LPARAM dwPoint) throw();
它看起来确实将x和y值保持为long
。 C ++中是否有预定义的类/结构,它包含x和y点的浮点值?
此外,从cplusplus查看有关C ++变量类型的this page,看起来有long int
和long double
。如何/为什么(我认为)编译器推断出typedef long LONG
是long int
而不是long double
?
答案 0 :(得分:2)
long
单独使用时会被解释为long int
。
要在标准C ++中保持不同的值,您可以使用std::pair
:
typedef std::pair<long double, long double> point_t;
point_t t;
t.first = 10.0f;
t.second = -1.f;
对于这个精确的情况,我更喜欢定义一个特殊的结构来保存值,所以你可以像运算符一样添加方法:
struct point_t {
long double x;
long double y;
point_t& operator+=(const point_t& rhs)
{ x += rhs.x; y += rhs.y; return *this; }
// and so on
};
答案 1 :(得分:1)
CPoint
未在C ++中预定义(由MFC库提供)。 C ++不包含几何点的任何预定义类。
答案 2 :(得分:0)
除了其他人给出的有效答案外,这是我的意见。如果您必须使用CPoint
(和POINT
),则可以从CPoint
派生一个类,并提供您自己的构造函数和/或运算符,它们可以获取浮点数和双精度数。如果您没有进行客户区或GDI绘图,则可以使用自定义类或std::pair
类模板。