kyuseo의 게임 프로그래밍

클래스의 const 함수 내부에서 const 가 아닌 함수를 호출하는 방법 본문

C++ 개발

클래스의 const 함수 내부에서 const 가 아닌 함수를 호출하는 방법

kyuseo 2008. 1. 11. 18:24

개요..

 

클래스의 const 함수는 const 함수만을 호출 할 수 있습니다. 하지만 일반 클래스 함수를 호출 할 경우도 있는데 const 함수 에서 일반 함수를 호출하는 방법을 알려드립니다.

 

 

방법

 

함수 내부에서 this 포인터를 강제로 형변환하여 사용합니다.

 

예) CFile* pFile = (CFile*)this;

 

강제적으로 변환하기 때문에 위험합니다. 이와 같은 기법은 주의하여 사용합시다.

   

 

MFC CFile의 예제 코드

 

아래와 같이 CFile의 GetLength() 는 100% const 함수이지만, 내부적으로 const 가 아닌 함수를 사용하므로 컴파일 문제가 생깁니다.

 

이와 같은 경우 MFC에서는 이 기법을 이용하여 해결 하였습니다.

 

// MFC의 CFile 의 예

 

DWORD CFile::GetLength() const
{
 ASSERT_VALID(this);

 DWORD dwLen, dwCur;

   

 // Seek is a non const operation
 CFile* pFile = (CFile*)this;

 

 dwCur = pFile->Seek(0L, current);
 dwLen = pFile->SeekToEnd();
 VERIFY(dwCur == (DWORD)pFile->Seek(dwCur, begin));

 return dwLen;
}