c ++将部分数组(在某个偏移量处)转换为不同的类型
c++ casting partial array (at some offset) to a different type
在OpenCV库中,Vec4f
被定义为一个四元组浮点数,类似这样:
struct Vec4f {
float data[4];
/* here we may have some methods for this struct */
inline float operator [] (int i) { return data[i]; }
};
有时用来表示一条直线:data[0-1]表示该直线的一个单位方向向量,而data[2-3]表示该直线上的一个点。
在很多情况下,我需要将其转换为二元组"Point"。在 OpenCV 中,点(或向量)的定义类似于以下内容:
struct Point2f {
float x; // value for x-coordination
float y; // value for y-coordination
};
我要转换一行:
Vec4f myLine;
方向矢量和该线上的一个点:
Point2f & lineDirectionalVector;
Point2f & linePoint;
我不想抄袭,所以我只是引用。因此,我写道:
Point2f & lineDirectionalVector = *(Point2f*)(&myLine[0]);
Point2f & linePoint= *(Point2f*)(&myLine[2]);
问题是:这种做法好吗?如果没有,我该怎么做?
大概第一个可以这样写:
Point2f & lineDirectionalVector = reinterpret_cast<Point2f>(myLine);
有什么建议吗?首选方式?或者也许我只是像这样复制:
Point2f lineDirectionalVector(myLine[0], myLine[1]);
Point2f linePoint(myLine[2], myLine[3]);
哪个更易读...
Eigen C++ 线性代数库首先使用段、头和尾向量方法来做您想要的更多一点-class。通常最好接受那些试图首先做到这一点的人 class 因为您输入的内容中存在各种错误,可能需要您一段时间才能找到,如果您问什么是最易读的,那么该代码会总是在我的脖子后面竖起一些毛发......而且 OpenCV 的整个观点与 vec 概念是可疑的。
但是值得注意的是,数组保证是连续的,没有填充,所以用类似的东西来转换 various 是没有问题的。您需要小心转换结构,例如 Point2f,因为当涉及结构时很容易出现对齐和填充问题。当您编写该类型的代码并阅读标准的相关部分时,使用 static_asserts 是个好主意。
在OpenCV库中,Vec4f
被定义为一个四元组浮点数,类似这样:
struct Vec4f {
float data[4];
/* here we may have some methods for this struct */
inline float operator [] (int i) { return data[i]; }
};
有时用来表示一条直线:data[0-1]表示该直线的一个单位方向向量,而data[2-3]表示该直线上的一个点。
在很多情况下,我需要将其转换为二元组"Point"。在 OpenCV 中,点(或向量)的定义类似于以下内容:
struct Point2f {
float x; // value for x-coordination
float y; // value for y-coordination
};
我要转换一行:
Vec4f myLine;
方向矢量和该线上的一个点:
Point2f & lineDirectionalVector;
Point2f & linePoint;
我不想抄袭,所以我只是引用。因此,我写道:
Point2f & lineDirectionalVector = *(Point2f*)(&myLine[0]);
Point2f & linePoint= *(Point2f*)(&myLine[2]);
问题是:这种做法好吗?如果没有,我该怎么做? 大概第一个可以这样写:
Point2f & lineDirectionalVector = reinterpret_cast<Point2f>(myLine);
有什么建议吗?首选方式?或者也许我只是像这样复制:
Point2f lineDirectionalVector(myLine[0], myLine[1]);
Point2f linePoint(myLine[2], myLine[3]);
哪个更易读...
Eigen C++ 线性代数库首先使用段、头和尾向量方法来做您想要的更多一点-class。通常最好接受那些试图首先做到这一点的人 class 因为您输入的内容中存在各种错误,可能需要您一段时间才能找到,如果您问什么是最易读的,那么该代码会总是在我的脖子后面竖起一些毛发......而且 OpenCV 的整个观点与 vec 概念是可疑的。
但是值得注意的是,数组保证是连续的,没有填充,所以用类似的东西来转换 various 是没有问题的。您需要小心转换结构,例如 Point2f,因为当涉及结构时很容易出现对齐和填充问题。当您编写该类型的代码并阅读标准的相关部分时,使用 static_asserts 是个好主意。