프로그래밍 이야기/C++
[C++] 연산자 오버로딩 시 상수/비상수 버전 간 코드 중복 줄이기
hwi.middle
2025. 3. 28. 13:08
이펙티브 C++을 읽는 중에 처음보는 hack이 있어서 기록해두고자 한다.
연산자 오버로딩을 할 때 상수(const) 버전/비상수 버전을 나눠서 오버로딩할 수 있는데, 반환 타입에 const가 있냐없냐 차이일 뿐 하는 역할은 같으니 다음과 같은 방법을 통해 코드 중복을 줄일 수 있다.
class TextBlock
{
public:
const char &operator[](std::size_t position) const
{
...
return text[position];
}
char &operator[](std::size_t position)
{
return const_cast<char &>(
static_cast<const TextBlock &>(*this)[position]
);
}
};
요지는 비상수 버전 함수에서 static_cast로 const를 붙여서 상수 버전 함수를 호출하고, const_cast로 const를 다시 떼어서 반환하는 것이다.