【问题标题】:How to add or overload function to vector如何向向量添加或重载函数
【发布时间】:2014-02-03 20:22:14
【问题描述】:

我想通过为我的向量创建一个运算符来简化我的编码。

我有一堂课Voxelgrid

class Voxelgrid {
    struct Voxel{
        float dist;
        float weight;
        };
    vector<Voxel> grid;
    int RESOLUTION;
};

现在的事情是我想访问和写入这些体素很多,我将通过使用索引来访问它们:

grid[i + j*RESOLUTION + k*RESOLUTION*RESOLUTION].distance

例如。

是否可以编写一个运算符,以便我可以改为编写

grid(i,j,k).distance

改为。

【问题讨论】:

  • 您确定不想写在voxelgrid 而不是网格成员上吗?即voxelgrid(i,j,k).distancevoxelgrid[i,j,k].distance(两者都是可能的。
  • s/distance/dist/,大概。看起来您在示例中使用grid 作为Voxelgrid 实例,但这很令人困惑,因为向量成员也称为grid

标签: c++ operators operator-overloading


【解决方案1】:

例如

class Voxelgrid 
{
public:
   const Voxel & operator []( std::vector<Voxel>::size_type i ) const
   {
      return grid[i];
   }
//...
};

或者你可以定义一个成员函数

class Voxelgrid 
{
public:
   const Voxel & GetVoxel( size_type i, size_type j, size_type k ) const
   {
      return grid[i + j*RESOLUTION + k*RESOLUTION*RESOLUTION];
   }
//...
};

【讨论】:

  • 谢谢! const Voxel & GetVoxel/operator 中的 '&' 是什么意思?
  • @Erik:阅读你的 C++ 书中关于参考的章节。实际上,请阅读整本书。
  • @Erik it mwans 对向量元素的常量引用。所以你可以应用声明为 const 的类的方法。
  • 谢谢 Vlad,我正在尝试通过重新实现我以不同方式完成的一些项目来提高我的 C++ 知识。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 2020-06-03
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多