Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ [] array operator with multiple arguments?

Can I define in C++ an array operator that takes multiple arguments? I tried it like this:

const T& operator[](const int i, const int j, const int k) const{ 
    return m_cells[k*m_resSqr+j*m_res+i];
}

T& operator[](const int i, const int j, const int k){ 
    return m_cells[k*m_resSqr+j*m_res+i];       
}

But I'm getting this error:

error C2804 binary operator '[' has too many parameters
like image 479
genesys Avatar asked Dec 20 '09 17:12

genesys


2 Answers

Prior to C++23, you could not overload operator[] to accept multiple arguments. As a workaround, you instead can overload operator(). (See How do I create a subscript operator for a Matrix class? from the C++ FAQ.)


From C++23, as mentioned in a (deleted) answer by cigien, multiple subscript arguments can be passed to operator[] directly. See this demo from the cppreference page.

like image 189
jamesdlin Avatar answered Nov 06 '22 05:11

jamesdlin


It is not possible to overload the [] operator to accept multiple arguments, but an alternative is to use the proxy pattern.

In two words: a[x][y], the first expression (a[x]) would return a different type, named proxy type, which would have another operator[]. It would call something like _storedReferenceToOriginalObject->At(x,y) of the original class.

You will not be able to do a[x,y], but I guess you wanted to overload the usual C++-style 2D array syntax anyway.

like image 48
Pavel Radzivilovsky Avatar answered Nov 06 '22 04:11

Pavel Radzivilovsky