[완료] 컴파일러가 어떻게 template class 헤더를 precompile 할 수 있는 건가요?
글쓴이: newpolaris / 작성시간: 일, 2010/09/05 - 12:21오전
template class는 compile 타임에 그것이 실제 쓰인 코드에서
단순히 인수 이상의 것에 접근 할경우 인스턴스화 된다고 책에서 읽은것 같은데요,
g++ multi_array.hpp 하니까
multi_array.hpp.gch 라는 30m 짜리 파일이 생성되더라구요.
글에서 보니까 이걸 그냥 쓰세요 라고 되어있던데요.
src 파일도 안넣어줘서 type에 int가 들어갈지 vector가 들어갈지 모를껀데
어떻게 만드는 것인가요?
혹시 제가 지금 잘못된 헛소리를 말하고 있다면
틀린점좀 지적해주세요. cpp 오랜만에 접해서 제 기억이 잘못됬을 수도 있을것 같아요;
ps.
http://bcbjournal.org/articles/vol4/0005/Pre-compiled_header_tips.htm
이 글에서는 전체 compile 때 계속 regenerate 된다고 나와있는데요,
처음에 생긴 precompile는 어떻게 생긴건가요?
고수님들의 답변 부탁드립니다.
Forums:
제 생각에는...
precompile은 컴파일할때 좀더 빨리 하기 위해서 중간단계를 생성하는 것 아닌가요? 미리 컴파일한다고 해서 컴파일을 다 할 필요는 없죠. 결국 template을 컴퓨터가 인식하기 쉬운 형태로만 바꿔 놓고 나중에 컴파일 할때 인수만 치환하면 되도록 만들어 놓는 듯 합니다.
template을 가지고
template을 가지고 바이너리를 만들어 내는 과정에서 문제는 과연 어디가 템플릿을 사용하는 구문이고, 어디를 새로 작성해야 하는가 입니다. int a와 T a인데 T==int이면 코드는 똑같이 발생되니까, 구분을 못하기 때문에 소스 자체를 요구합니다.
근데 이걸 바꿔 말하면, 바이너리로 변환해 놓는다 쳐도 어디가 어떻게 템플릿에 따라서 변환되어야 하는지 별도로 기록해 두면 소스가 굳이 필요하지는 않습니다.
감사합니다. nEW
감사합니다.
자세한 건 컴파일러 열어봐야 되겠네요.
nEW
nEW
댓글 달기