1

这个问题是我在阅读 C++ Obj 模型时出现的,第 1 章。举一个我看不懂的例子。

作者想定义一个模板类,类型和坐标个数都可以控制。

这是代码:

template < class type, int dim >
class Point
{
public:
   Point();
   Point( type coords[ dim ] ) {
      for ( int index = 0; index < dim; index++ )
         _coords[ index ] = coords[ index ];
   }
   type& operator[]( int index ) {
      assert( index < dim && index >= 0 );
      return _coords[ index ]; }
   type operator[]( int index ) const
      {   /* same as non-const instance */   }
   // ... etc ...
private:
   type _coords[ dim ];
};
inline
template < class type, int dim >
ostream&
operator<<( ostream &os, const Point< type, dim > &pt )
{
   os << "( ";
   for ( int ix = 0; ix < dim-1; ix++ )
      os << pt[ ix ] << ", ";
   os << pt[ dim-1 ];
   os << " )";
}

是什么index < dim && index >= 0 意思?索引是一个容器,如矢量?

他为什么要覆盖运营商?

4

1 回答 1

2

是什么index < dim && index >= 0意思?

它评估true是否index小于dim和大于或等于零。

索引是一个容器,如矢量?

不,它是一个整数,用作数组的索引,_coords. 有效索引为 0, 1, ..., dim-1,因此断言检查index该范围内的值。

他为什么要覆盖运营商?

所以你可以使用[]该点来访问组件,就好像它本身就是一个数组一样。

Point<float, 3> point; // A three-dimensional point
float x = point[0];    // The first component
float y = point[1];    // The second component
float z = point[2];    // The third component
float q = point[3];    // ERROR: there is no fourth component

其中每一个都调用重载运算符。最后一个将使断言失败;具体来说,index会是 3,dim也会是 3,所以index < dim会是假的。

于 2013-09-12T10:33:46.330 回答