Is Derived #
처음에 이 소스에서 template의 가능성을 보고 뒷통수를 맞은 기분 이었습니다.
기본적인 내용은 Base에서 Derived가 상속 되었느냐를 확인 하는 코드 입니다.
이 예제 뿐만 아니라 Modern C++ Design(Andrei Alexandrescu)에는 무궁무진한 template의 향연이 펼쳐집니다.
기본적인 내용은 Base에서 Derived가 상속 되었느냐를 확인 하는 코드 입니다.
이 예제 뿐만 아니라 Modern C++ Design(Andrei Alexandrescu)에는 무궁무진한 template의 향연이 펼쳐집니다.
아래의 예제는 More Exceptional C++(Herb Sutter)에 나오는 내용입니다.
원본은 Andrei Alexandrescu에 의해 작성된 글이라고 More Exceptional C++에서 명시 하고 있습니다.
제가 컴파일러에서 테스트하고 수정한 소스입니다.
원본은 Andrei Alexandrescu에 의해 작성된 글이라고 More Exceptional C++에서 명시 하고 있습니다.
제가 컴파일러에서 테스트하고 수정한 소스입니다.
//////////////////////////////////////////////////////// #include <iostream> using namespace std; template <class Derived, class Base> class IsDerived { private: class YES { char c[2]; }; class NO {}; static YES Test(Base *p); static NO Test(...); public: // VC++, g++ 문제 없음 static bool Is() { return (sizeof(Test(static_cast<Derived *>(0))) == sizeof(YES)); } // VC++ 문제없음 // g++ 3.2 컴파일 안됨 // g++ 3.4.1 에서는 문제 없음 // enum { Is = (sizeof(Test(static_cast<Derived *>(0))) == sizeof(YES)) }; }; class B {}; class C : public B {}; int main() { cout << IsDerived<C, B>::Is() << endl; }
'Dev > C++' 카테고리의 다른 글
C++ 0x (0) | 2008.05.09 |
---|---|
memory pooling - code (0) | 2008.05.01 |
C++에서 프로퍼티 구현하기 (0) | 2008.05.01 |
boost::pool 예제 (0) | 2008.05.01 |
STLport 초간단 설치 (1) | 2008.05.01 |