posted by 쑥갓 2006.05.10 03:39

template<typename EnumType, EnumType EnumMax, template<typename, EnumType> class ContainerType >
class SEnum
{

...

};

이런 형태의 템플릿을 사용하고 있는데
자동화 코드에서 컴파일 타임에 이 템플릿으로 정의된 type인가..를 검사를 해야 했었다.

그래서 심플하게 인터페이스 클래스를 만들어서 상속받고 그 인터페이스 클래스를 Driven한 클래스인가...를 검사하는 방법으로 갔었다.

그르나-_-

사태는 그리 쉽게 흘러갈리 없고
인터페이스 클래스를 상속 받으면 안되는 상황이 발생하였다!! 두둥!!!

결국은 한시간여의 삽질 끝에 이런 코드를 만들어 냈다.

template<typename T>
struct SEnumTraits
{
enum { value = false };
};

template<typename EnumType, EnumType EnumMax, template<typename, EnumType> class ContainerType>
struct SEnumTraits< SEnum<EnumType, EnumMax, ContainerType> >
{
enum { value = true };
};

#define is_SEnum(T) ( SEnumTraits<T>::value )

이로써 상속을 안 받고 특정 템플릿을 사용한 type인지를 알 수 있게 되었다.
템플릿 인자가 제멋대로라 generic한 is_template는 실패-_-;

어쨋건 관련 코드들을 싹 새로 정리해야 하는 위기에 처했다....;;
이번주는 계속 메타때매 시간 다 쓰네.. 헹~

신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'자료 > 내자료' 카테고리의 다른 글

게임을 위한 GUI모듈  (4) 2006.07.31
MSB/LSB template  (0) 2006.05.18
is_template  (0) 2006.05.10
분절 모델의 접합부위 Normal값 수정  (0) 2006.02.23
enum string  (0) 2005.07.08
텍스쳐 포맷 변경해서 저장하기  (0) 2005.05.16

티스토리 툴바