VC++의 STL 구현이 워낙 직설적(?)이라 STL의 hash보다 CAtlMap이 성능이 월등히 뛰어나다 해서
프로젝트의 hash를 전부 CAtlMap으로 교체했다.
성능비교:
그런데 요따구의 컴파일 에러가 발생!
머냐.. MSDN에 있는대로 거의 그대로 사용했는데!!
그래서 몇일간의 삽질을 거친 후..
MS에서 CString에 대한 구현을 여기저기 해놔서 그렇다는 이유를 알게되었다.
그래서 엄청 단순하게 해결한 것이 바로!
CAtlMap<CString, int>
라는 코드를
CAtlMap<CAtlString, int>
로 바꿔서 그냥 해결...
아 허무하다.. 몇일을 날린거냐..
프로젝트의 hash를 전부 CAtlMap으로 교체했다.
성능비교:
1. http://eslife.tistory.com/entry/C-STL-map-과-ATL-의-map-성능-비교
2. https://sites.google.com/site/kokowiki/Home/hash_map-vs-catlmap
2. https://sites.google.com/site/kokowiki/Home/hash_map-vs-catlmap
그런데 요따구의 컴파일 에러가 발생!
1>e:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(128) : error C2440: '<function-style-cast>' : 'const CString'에서 'ULONG_PTR'(으)로 변환할 수 없습니다.
1> 이 변환을 수행할 수 있는 사용 가능한 사용자 정의 변환 연산자가 없거나 연산자를 호출할 수 없습니다.
1> e:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(127) : 클래스 템플릿 멤버 함수 'ULONG ATL::CDefaultHashTraits<T>::Hash(const T &) throw()'을(를) 컴파일하고 있습니다.
1> with
1> [
1> T=CString
1> ]
1> e:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(162) : 컴파일 중인 클래스 템플릿 인스턴스화 'ATL::CDefaultHashTraits<T>'에 대한 참조를 확인하십시오.
1> with
1> [
1> T=CString
1> ]
1> e:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(170) : 컴파일 중인 클래스 템플릿 인스턴스화 'ATL::CDefaultElementTraits<T>'에 대한 참조를 확인하십시오.
1> with
1> [
1> T=CString
1> ]
1> e:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(1989) : 컴파일 중인 클래스 템플릿 인스턴스화 'ATL::CElementTraits<T>'에 대한 참조를 확인하십시오.
1> with
1> [
1> T=CString
1> ]
1> e:\works\trunk\prj\vrui\pluginman.h(25) : 컴파일 중인 클래스 템플릿 인스턴스화 'ATL::CAtlMap<K,V>'에 대한 참조를 확인하십시오.
1> with
1> [
1> K=CString,
1> V=int
1> ]
1> 이 변환을 수행할 수 있는 사용 가능한 사용자 정의 변환 연산자가 없거나 연산자를 호출할 수 없습니다.
1> e:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(127) : 클래스 템플릿 멤버 함수 'ULONG ATL::CDefaultHashTraits<T>::Hash(const T &) throw()'을(를) 컴파일하고 있습니다.
1> with
1> [
1> T=CString
1> ]
1> e:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(162) : 컴파일 중인 클래스 템플릿 인스턴스화 'ATL::CDefaultHashTraits<T>'에 대한 참조를 확인하십시오.
1> with
1> [
1> T=CString
1> ]
1> e:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(170) : 컴파일 중인 클래스 템플릿 인스턴스화 'ATL::CDefaultElementTraits<T>'에 대한 참조를 확인하십시오.
1> with
1> [
1> T=CString
1> ]
1> e:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(1989) : 컴파일 중인 클래스 템플릿 인스턴스화 'ATL::CElementTraits<T>'에 대한 참조를 확인하십시오.
1> with
1> [
1> T=CString
1> ]
1> e:\works\trunk\prj\vrui\pluginman.h(25) : 컴파일 중인 클래스 템플릿 인스턴스화 'ATL::CAtlMap<K,V>'에 대한 참조를 확인하십시오.
1> with
1> [
1> K=CString,
1> V=int
1> ]
머냐.. MSDN에 있는대로 거의 그대로 사용했는데!!
그래서 몇일간의 삽질을 거친 후..
MS에서 CString에 대한 구현을 여기저기 해놔서 그렇다는 이유를 알게되었다.
그래서 엄청 단순하게 해결한 것이 바로!
CAtlMap<CString, int>
라는 코드를
CAtlMap<CAtlString, int>
로 바꿔서 그냥 해결...
아 허무하다.. 몇일을 날린거냐..
'스킬북 > 개발 정보' 카테고리의 다른 글
| [오류열전] 0xC0000005: Access violation (0) | 2010/09/29 |
|---|---|
| [오류열전] CAtlMap과 CString의 오류 해결 (3) | 2010/08/17 |
| VC9로 컴파일된 DShow용 BaseClasses (0) | 2010/06/08 |
| SVN에서 버전 관리하지 않는 파일 목록 (0) | 2010/04/06 |


|꼬마늑대|


댓글을 달아 주세요
비밀댓글입니다
저도 급관심이 가는군요.
그런데 한 보름정도 정신없이 일을 하는 중이라
천천히 연락드려도 되겠습니까?
나중에 연락드리겠습니다. 기다려주세요~
댓글 남겨주셔서 감사합니다.
좋은 정보입니다.