在 c++ 中为结构实现索引器
Implementing an indexer for a struct in c++
我在 c++/qt 中有以下三角形结构,我想为它实现一个索引器,以便我可以通过索引访问任何顶点,任何人都可以帮助我解决这个问题吗?
结构如下:
struct Triangle
{
QVector3D *a;
QVector3D *b;
QVector3D *c;
}
如果你真的需要它,你可以像这样在你的类中添加运算符 []:
struct Triangle
{
QVector3D *a;
QVector3D *b;
QVector3D *c;
QVector3D * operator[](int n) {return n==0?a:n==1?b:n==2?c:Q_NULLPTR;}
};
Triangle tr;
//.....
auto test = tr[0]; //will return vector 'a'
听起来你已经习惯了C#,在哪里创建你需要new
的对象。在C++,你没有。
struct Triangle
{
QVector3D a;
QVector3D b;
QVector3D c;
QVector3D& operator[](int);
}
QVector3D& Triangle::operator[](int which)
{
switch(which)
{
case 0: return a;
case 1: return b;
case 2: return c;
default: throw std::out_of_range("Must be 0-2");
}
}
这在 C# 意义上声明了"get"和"set",您可以在赋值的任一端使用它,具有普通含义。
例如Triangle t;
auto point = t[1];
t[2] = { 1, 2, 3 };
您可以使用std::array
struct Triangle {
std::array<QVector3D *, 3> points;
QVector3D * operator[](int n) {return points[i];}
};
Triangle tr;
auto test = tr[0]; //will return first component (former 'a')
由于点在struct Triangle
中是公共的,因此您不需要运算符重载。
auto test = tr.points[0]; //will return first component (former 'a')
如果您不打算在struct Triangle
中添加更多功能,请考虑使用
using Triangle = std::array<QVector3D *, 3>;
相关文章:
- 如果没有malloc,链表实现将失败
- 数组索引的值没有增加
- 有没有更好的方法可以使用特征/C++实现 matlab 的逻辑索引?
- 当我在网格/面中实现索引时,为什么它会返回OpenGl错误
- 为什么我不能使用在 Visual C++ 32 位中实现运算符无符号 int() 作为数组索引的类?
- 在 c++ 中为结构实现索引器
- 为什么用于阈值矩阵元素的 Matlab 逻辑索引操作在性能上优于 mex 实现?
- 为元组实现创建索引序列
- 持久相邻图索引实现
- 模型中虚拟索引实现的替代方法
- C++多索引映射实现
- 了解Qt视图模型架构:何时创建以及如何在QAbstractItemModel实现中清除索引
- 如何实现二进制索引树
- 多索引哈希表实现
- boost::multi_index_container:从任意索引中取equal_range,只实现一次循环
- 如何在c++中高效地实现PHP字符串索引数组
- 归并排序c++实现脱界索引访问
- (DirectX 11)动态顶点/索引缓冲区实现恒定的场景内容变化
- 使用向量作为索引实现对结构向量的访问
- 如何实现包含负值的循环索引