몇몇 프로그래밍 언어에서 다중 상속을 지원할지 단일 상속을 지원 할지, 프로그래밍 언어가 상속을 어디까지 지원해 주는게 좋을지 논쟁이 계속 되고 있다고 한다. 이 논쟁을 우리도 함께 해보자는 취지로 만들어진 항목이 바로 More Exeptional C++ 24항목에 나와 있다. 1. 다중 상속(MI)은 무엇이고, MI를 C++에 도임함으로써 생길 수 있는 가능성이나 문제점에는 무엇이 있나? 위 그림이 바로 다중 상속(MI)을 아주 잘 보여주고 있다. Bat 은 Mammalia 와 Bird 를 상속하므로써 MI 다. 라고 말할 수 있다. 문제점은 그림에서 봤듯이 Bat 은 간접적으로 Animal 을 두개 가지게 되는 문제가 생긴다.(이런 간접적인 두개일 경우 문제로 지적되는 것이 바로 초기화 문제를 들 수..
전체 글 검색 결과
함수 템플릿의 경우 템플릿 매개변수가 함수의 인자에서 추론 될 수 있음을 알게 되었다. 이 추론 때문에, 함수 오버로딩이란 기능을 이용하기 위해선, 몇가지 규칙을 이해하고 있어야 하는 리스크가 있다. 물론 함수 템플릿을 사용 하는것에 비하면 아무것도 아니지만...우선 코드를 보고, 어느게 호출 될지 생각해 보자. #include template T sqrt( T ); template T std::complex sqrt( std::complex ); double sqrt( double ); void f( std::complex z ) { sqrt( 2 ); sqrt( 2.0 ); sqrt( z ); } 13, 14, 15 라인에서 어떤 함수가 호출 될 것이라고 생각 하는가? 13 라인에선 맨 위의 함수 템..
시작하기 앞서 한가지 중요한 사실을 짚어 본다면 " 함수 템플릿에서 템플릿 매개변수는 함수의 인자에 의해서 추론 된다" 를 알고 있어야 할것 같다. 이 추론 될 수 있음으로 추론 되는 방법을 알아야 되기 때문이다. 이 추론 되는 방법은 함수 오버로딩과 깊은 연관이 있으며, 어떤 함수를 호출할지도 판별하게 되기 때문이다. 우선 컴파일러는 함수 호출 문을 보고, 템플릿 매개변수와 매칭을 시키는데, 이때 함수의 인자가 함수의 템플릿 매개변수를 모두 사용 할 때, 인자를 템플릿 매개변수로써 판별 할 수 있다. 만약 템플릿 매개변수를 함수의 인자로 모두 사용 하지 않는 다면, 명시적으로 에 넣어 주어야만 한다. 이 함수 템플릿과 클래스 템플릿의 큰 차이는 바로 이 추론에 있다. 함수 템플릿은 인자로 추론하여, 템..
다음 문구는 비야네 스트롭 스트룹의 "The C++ Programming Language"의 13장, 템플릿의 처음 부분의 것을 인용한 것이다. " '개념(concept)'이라 하는 것은 그 자체의 독립성이 보장될 때는 독립적으로 표현되어야 마땅하며, 다른 개념과 결합시키려면 나음대로의 합당한 이유가 있어야 한다. 이것은 원칙이며, 이 것이 깨진다면, 이상한 개념들의 뭉치와 불필요한 의존구조만이 난무한 산업폐기물만이 하나 더 추가 될 뿐이다. " 또한 다음과 같이 마무리 한다. " 독립과 결합, 이 두 가지를 어떻게 선택하든지 둘 중 하나라도 지키지 않으면, 소프트웨어 구성에 필요한 구성요소를 선택하는 데 있어서 상당 부분의 융통성을 잃게 된다는 것을 확실하다. C++ 에는 이런 문제에 대한 해결책을 가..
템플릿 인스턴스화 시점이 템플릿 매개변수를 넘겨서, 그 템플릿이 사용 되어질 때라고 정리 했었다. 그렇다면 "매개변수"란? 도데체 무엇일까? 일반 함수의 매개변수는 매개변수 타입의 값이다. 그렇다면 템플릿 매개변수의 타입은 무엇이 있을까? 두가지로 정할 수 있는데, 한가지가 바로 C++에서 타입으로 인정되는 것이 매개변수 타입 중 1개 이고, 컴파일 타임에 인식 될수 있는 상수형 값 이 마지막 타입이 된다. 정리 하자면, 1. C++ 에서 인정되는 타입 2. C++ 에서 컴파일 타임에 인식되는 값 이 두가지가 템플릿 매개변수가 된다. C++ 에서 타입으로 인정 되는게 무엇일까? int, unsinged int 등등등 기본 타이과 사용자 타입, 그리고 템플릿 타입이 있다. 템플릿 타입은 역시 템플릿이 사용..
템플릿 정의하기에서 정의하는 방법을 정리했다. 정리 되는 도중에 한가지 의문점이 생기는데, 그 의문점은 "도데체 언제 템플릿들이 코드화가 이루어 지는 것일까?" 이다. 당연한 이야기 겠지만, 컴파일러에 의해서 링크가 되기 전에 이루어 질 것이지만, 정확한 시점을 모르면 약간 어리 둥절할 때가 있기 떄문이다. 이 어리둥절함은 컴파일 타임이라는게 전처리기 타임이라는 것도 있고 이진코드 생성 타임도 있고, 문법 검사 타임도 있고, .. 여러 타임이 나누어져 있기 때문에, 템플릿 인스턴스화의 시점에 따라서 템플릿 코드가 달라 질 수 있어, 어리 둥절 하게 된다. 그렇다면, "템플릿 인스턴스화" 란 무엇인가? 템플릿 매개변수에 인자를 넘겨서 클래스 선언을 만드는 과정을 "템플릿 인스턴스화" 라고 한다. 이런 인스..
최근댓글