2011-08-22 2 views
9

컴파일 타임에 해당 파생 유형을 기반으로 클래스에 대한 해시를 생성하려고합니다. 오늘은 그것을 좋아 생성 : (매우 불필요) 실행컴파일 타임에 C++ 유형 ID

template<class Type> 
class TypeBase 
{ 
public: 
    static const unsigned s_kID; 
}; 

template<class Type> 
const unsigned TypeBase<Type>::s_kID = hash(typeid(Type)); 

을하지만이 발생 시간 초기화 코드

(해시 (..) 함수는 표준 :있는 type_info :: 이름()을 기반으로 간단한 해시를 않습니다)

아이디어?

+0

해시 충돌이 발생하거나 문제가되지 않을 위험이 있습니까? –

+0

@ Andreas : 해시를 만들 때 해시 항목이있는지도도 있습니다. 따라서 충돌이 있는지 확인할 수 있습니다. 게다가, 수업의 수는 아마 20 일 것입니다. 그래서 나는 그것도 안전하다고 생각합니다. – Robert

+0

'id = ++ someGlobalCounter'와 같은 것을 할 수 없습니까? (나는 이것이 중요하지 않고 호기심이없는 것임을 깨달았다.) –

답변

3

거친 유형을 해시하지 않는다고 가정 할 때 프로세스 시작시 발생하는 모든 사항과 기존 코드가 얼마나 단순한 지 감안할 때 기존 솔루션을 그대로 그대로 두겠습니다.

+0

감사합니다. 조숙 한 최적화의 경우, 응? ;) – Robert

+0

실제로. 애플리케이션이 시작하기에 너무 오래 150 마이크로 초가 걸린다는 불평을하는 사용자와 같이 런타임에 미치는 영향이 없다면 그대로 두십시오. 그리고이 변수의 포인터를 부호없는 변수로 캐스팅하는 마술을 시도하지 마십시오. 이것은 이식 가능하지 않기 때문입니다. – PlasmaHH

+0

@robert 네, 그렇습니다. –