Как добавить или перегрузить функцию в вектор

0

Я хочу немного упростить кодирование, создав оператор для моего вектора.

У меня есть класс Voxelgrid:

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

Теперь дело в том, что я хочу получить доступ и написать этим Voxels довольно много, и я получу доступ к ним, используя индексирование:

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

например.

Можно ли написать оператор, чтобы я мог вместо этого написать

grid(i,j,k).distance

вместо.

  • 0
    Вы уверены, что не хотите писать на voxelgrid вместо элемента сетки? Это voxelgrid(i,j,k).distance или voxelgrid[i,j,k].distance (возможны оба варианта.
  • 0
    s/distance/dist/ , предположительно. И похоже, что вы используете grid для экземпляра Voxelgrid в примерах, но это сбивает с толку, так как член вектора также называется grid .
Теги:
operators
operator-overloading

1 ответ

0
Лучший ответ

Например

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];
   }
//...
};
  • 0
    Спасибо! Что означает «&» в const Voxel & GetVoxel / operator?
  • 0
    @Erik: прочитайте главу в своей книге C ++ о ссылках. Собственно, прочитайте всю книгу.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню