In general, how do you declare the index [ ]
operator of a class for both read and write accesss?
I tried something like
/**
* Read index operator.
*/
T& operator[](T u);
/**
* Write index operator
*/
const T& operator[](T u);
which gives me the error
../src/Class.h:44:14: error: 'const T& Class::operator[](T)' cannot be overloaded
../src/Class.h:39:8: error: with 'T& Class::operator[](T)'
You simply have one overload that'll be used for both reads and writes:
Having said that, you might also want to have a
const
overload:This will provide read-only indexing into
const
instances of your class.Your mutable version is fine:
but the
const
version should be aconst
member function as well as returning aconst
reference:This not only distinguishes it from the other overload, but also allows (read-only) access to
const
instances of your class. In general, overloaded member functions can be distinguished by their parameter types and const/volatile qualifications, but not by their return types.You get the error, because overloaded functions cannot differ only by return type. But they can differ by const-ness.
Note "write" and "read" swapped places.
Also, don't you actually mean the argument of the operator to be some integral type ?