正如您在C#类中所知,我们可以定义一个具有多个参数的索引器。 但是在C ++中,operator []可以接受一个参数。有没有办法在C ++中使用多个参数来表达索引器?
C#中的索引器:
public AnyType this[arg1 , arg2 , .....]
{
get { ... };
set { ... };
}
C ++中的[]运算符:
AnyType & operator [] ( arg )
{
// our code
}
答案 0 :(得分:3)
您可以返回一个临时文件,该文件包含第一个索引并具有数据源的引用。
private:
class BoundArg {
private:
Data& data;
size_t i;
public:
BoundArg (etc.)
value_type& operator [] ( size_t j ) {
return data.get ( i, j );
}
};
public:
value_type& get ( size_t i, size_t j ) ...
BoundArg operator [] ( size_t i )
{
return BoundArg ( *this, i );
}
通常它不值得复杂,除非你有一个二维数组存储为一维数组,在这种情况下临时只是指向数组某处的指针。
public:
value_type& get ( size_t i, size_t j ) {
return data_ [ i * rowWidth_ + j ];
}
value_type* operator [] ( size_t i )
{
return data_ + i * rowWidth_;
}
答案 1 :(得分:2)
不,不幸的是,C ++中的[]
运算符只接受一个参数。用于估计多参数语法的最佳方法是重载()
运算符。这种方法由Boost线性代数库中的矩阵类使用,因此您可以按(row, column)
进行查找。
另一种方法是让[]
运算符返回一个代理类,该代理类也有一个重载的[]
运算符,允许使用my_object[0][1]
之类的语法。这类似于使用原生C N维数组获得的语法。
答案 2 :(得分:2)
您可以使用std::pair
,std::tuple
或boost::tuple
作为operator[]
的参数来实现同样的目标。