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
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With