C ++ overload [] left and right

I'm trying to figure out how I can overload [] on both left and right to function as set and retrieve for a custom string class I'm working on. eg:

char x= objAr[1]; //get
objAr[2]='a'; //set


The string class basically looks like this:

class String {
    char* data;
    unsigned int dataSize;
    char* getData();
    int getSize();



source to share

1 answer

If you always have data to back up, you can return the link:

char& String::operator[] (size_t idx)
{ return data[idx]; }

char String::operator[] (size_t idx) const
{ return data[idx]; }


In your case, that should be enough. However, if it was not for some reason (for example, if the data is not always of the correct type), you can also return a proxy object:

class String
  void setChar(size_t idx, char c);
  char getChar(size_t idx);

  class CharProxy
    size_t idx;
    String *str;
    operator char() const { return str->getChar(idx); }
    void operator= (char c) { str->setChar(idx, c); }

  CharProxy operator[] (size_t idx)
  { return CharProxy{idx, this}; }

  const CharProxy operator[] (size_t idx) const
  { return CharProxy{idx, this}; }


It will also allow you to do things like copy-write implicit communication.



All Articles