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 |