template class구현시..
글쓴이: junteken / 작성시간: 수, 2004/10/13 - 2:40오후
visual c++ 6.0에서 template class를 구현하게 되었습니다.
그런데 template class같은 경우에 class선언부와 구현부가 같은 파일안에
있지 않으면 LNK2001에러가 나네요...
왜그럴까요? g++에서는 같은 파일에 있지 않아도 되나요?
컴파일러에 따라서 다른건지..아니면 template만 특별히 그렇게 해줘야 하는지지...template은 공부만 했다가 오늘 우연히 구현한번 해보게 되었는데..
역시 머리로 알고있는거랑 차이가 있군요.. :lol:
모두 좋은 하루 되세요~~하늘이 참 맑네요...
Forums:
g++ 3.4와 몇몇 컴파일러는 export라는 키워드로(원래 표준이죠)
g++ 3.4와 몇몇 컴파일러는 export라는 키워드로(원래 표준이죠) 템플릿의 선언과 구현을 나눌 수 있습니다.. 하지만 나머지 대부분의 컴파일러는 아직 이 export를 비롯 c++표준을 완벽하게 구현하지 않고 있습니다.
얼마전 뉴스그룹을 보니 export의 경우는 구현의 어려움과 이 구문 자체의 효용에 대한 의문으로 많이 설전이 벌어지고 있더군요
Life rushes on, we are distracted
표준에 따르면 export라는 키워드를 써서 일반적인 헤더와 소스 파일을
표준에 따르면 export라는 키워드를 써서 일반적인 헤더와 소스 파일을 쓰는
식으로 할 수 있습니다만, 현재 이를 지원하는 컴파일러는 Comeau 이외에는
없는 것으로 알고 있습니다. 구현하기가 기술적으로 까다롭다고 하더군요.
그래서 export 키워드를 표준에서 제외하자고 주장하는 사람도 있습니다.
그러니 템플릿 클래스 구현까지 모두 #include 하도록 하는 것이 가장 확실한
방법입니다.
제가 사족을 올리면
템플릿클래스의 목적파일은 컴파일타임이 아니라 링크타임에서 결정되기때문에 그러한 문제들이 발생합니다. 만일 AIX/VACPP나 혹은 SUNWspro와 같은 상용유닉스컴파일러에서 템플릿의 선언과 구현을 분리했을 경우, cfront가 적용되어 별도의 저장소에 각각의 템플릿인자에 대한 오브젝트파일이 들어가게 되는데, 이들중 어느것이 사용될지는 링크시에만 결정됩니다.
사람 쥑이는 일이죠...
어차피 꼭 링크전에 목적코드를 만들어야할 필요가 없기때문에 보통은 헤더안에다 모두 때려박는(stl도 그렇습니다) 방식을 취합니다만 그것도 cfront만 가능한 컴파일러라면 결국 gcc를 설치해야 할 것입니다.
시간이 남으신다면 구글에서 "cfront"로 검색해보심을 추천합니다.
homeless
댓글 달기