본문 바로가기
스터디/C++

proxy class

by 유이얼 2019. 1. 7.

more effective c++ 중 가장 흥미로운 내용이었던.

std::string str = "string";
char c = str[0];
str[0] = 'S';

우변의 str[0]은 읽기동작, 좌변의 str[0]은 쓰기동작이다.

operator[](int)의 형태는 동일하나, 동작은 다르다. 어떻게 가능한 것일까?

 

구분할 수 없기 때문에, 처리를 뒤로 미룬다. 프록시 클래스에게 미룬다 (지연평가)

operator[](int)는 내부 클래스인 proxy_instant를 반환하게 한다.

proxy_instant는 char 형변환 가능하도록 하여 읽기동작을 지원한다.

operator=(char) 등을 재정의하여 쓰기동작을 지원한다.

 

물론, 프록시 패턴이 만능은 아니다.

char 타입과 호환되도록 재정의해줘야 할 연산자와 함수들이 많다. (&, ++, ...)

그래도 멋지고 아름다운 방법같다.

'스터디 > C++' 카테고리의 다른 글

overwrite vfpr  (0) 2019.01.27
R-Value  (0) 2019.01.07