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 |