이번 장은 주제 부터 말하는게 좋겠다. 내장 형식 중에 하나인 bool이 정말로 필요한지? 아니면 현재 존재하는 언어에서 제공하는 기능을 통하여 표현할 수 있는지? 에 대해서 나열해 놓은 것이다.
문제
wchar_t(C에서 typedef)에서 비롯해서, bool은 단지 ARM(Ellis90 : C++ Reference Manual)에서부터 C++에 추가된 내장 형식이다.
bool이 처리할 수 있는 것들은 기존 언어에서 내장 형식의 추가 없이 표현할수 있는가? 만약 할수 있다면 동일하게 동작하는 구현에 대해서 작성해보고, 표현할수 없다면, bool 내장 형식을 왜 표현못하는지 설명을 할수 있는 방법을 나열해 보거라.
....
...
..
.
해설
구현 할 수 없다. ture 와 false를 사용하는 bool 내장 형식이 존재하는 언어의 효과를 bool 없이는 똑같이 낼 수 없기 때문이다. 그러므로 아래 나열된 방법은 왜 구현할수 없는지에 대한 설명이다.
증명 1 : typedef 방법(이걸 생각한 사람은 10점 만점에 8.5점의 능력을 보유 했다.)
이 해결 책은 나쁘지 않지만, 함수의 매개변수일 때 문제가 생긴다. int형 매개변수나 bool형 매개변수는 똑같은 형이기 때문이다. 또한 내부에서 함수의 인자가 true 인지 false 인지도 검사해야 한다.
증명 2 : #define 방법( 0점 .... )
... 이 아이디어는 아주 나쁘다고 경고한다. 왜냐하면 #define 문제점도 생기기 때문이다. 그런 측에서 본다면 윈도우 프로그램밍에선 bool 형이 아닌 대문자 BOOL을 typedef int BOOL 하고 TRUE 1 과 FASLE 0 을 define 해야 했는지 알만하다.(이유 : 보다 많은 정보를 뱉어 내고 싶은데, bool 은 두가지 뿐이고, 오류가 났다면 0이 아닌 경우 어떤 숫자를 뱉어 냈는지 파악하려고 한것 같다. 즉 기능적인 bool 이 필요했기 때문으로 보인다. 워낙 windows 에는 .. 많은 API들이 있으니 .. 그럴만 하다. )
증명 3 : enum (점수 9 )
enum bool { false, true }
이 증명은 증명 1의 함수의 문제는 없앨수 있으나 자동 변환을 허용 하지 못하는 문제를 가지고 있다. 즉...
증명 4 : class(점수 9 / 10)
의심나는 부분 1에서 ... 함수의 오버로드 부분을 처리 하고자 할 경우 문제가 생길 수 있다.
코드
의심나는 부분 2 에서... operator int()나 void* 를 쓰지 않고서야 자연적으로 조절 할 수가 없다. 예를 들자면
bool b;
if( b ) // <-- 이 부분은 int형 반환이나 void*형 반환으로 처리 할수 있다.
{
}
하지만 이 부분 2를 처리 하고자 할때 부작용이 더욱 일으 킬 수 있다.
총평
이런 연구하는 자세에서 많은 것들을 알수 있을 것이라고 본다. operator int() 같은 반환법을 다시 한번 숙지 할 수 있었으며, 클래스라는 도구가 얼만큼 막강한지에 대해서 다시 알게 되었다. 또한 묵시적 형변환으로 클래스 객체가 생성되는 상황이나, 여러 상황으로 특정 형을 창조해 낼 수 있다는 시도가 매우 참신했다.
'책 정리 > Exceptional C++' 카테고리의 다른 글
항목 6 : 임시 개체들 (난이도 5) (0) | 2008.10.06 |
---|---|
항목 5 : 최대 재사용 가능한 일반 컨테이너 - 파트 2 (난이도 6) (0) | 2008.10.06 |
항목 4 : 최대 재사용 가능한 일반 컨테이너 - 파트 1 (난이도 8) (0) | 2008.10.06 |
항목 47 : 흐름 제어 (난이도 : 6) (0) | 2008.10.04 |
항목 46 : 포워딩 함수 (난이도 : 3) (0) | 2008.10.04 |
항목 44 : 캐스트 (난이도 : 6) (2) | 2008.10.04 |
항목 43 : const - 정확성 (난이도 : 6) (0) | 2008.10.03 |
항목 42 : 변수 초기화 (난이도 : 3) (0) | 2008.10.03 |
항목 3 : 대·소문자 구분 없는 문자열 - 파트 2 (난이도 5) (0) | 2008.09.10 |
항목 2 : 대·소문자 구분 없는 문자열 - 파트 1 (난이도 7) (0) | 2008.09.09 |
최근댓글