[완료] 컴파일러가 어떻게 template class 헤더를 precompile 할 수 있는 건가요?

newpolaris의 이미지

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는 어떻게 생긴건가요?

고수님들의 답변 부탁드립니다.

kaeri17의 이미지

precompile은 컴파일할때 좀더 빨리 하기 위해서 중간단계를 생성하는 것 아닌가요? 미리 컴파일한다고 해서 컴파일을 다 할 필요는 없죠. 결국 template을 컴퓨터가 인식하기 쉬운 형태로만 바꿔 놓고 나중에 컴파일 할때 인수만 치환하면 되도록 만들어 놓는 듯 합니다.

SoulreaveR의 이미지

template을 가지고 바이너리를 만들어 내는 과정에서 문제는 과연 어디가 템플릿을 사용하는 구문이고, 어디를 새로 작성해야 하는가 입니다. int a와 T a인데 T==int이면 코드는 똑같이 발생되니까, 구분을 못하기 때문에 소스 자체를 요구합니다.

근데 이걸 바꿔 말하면, 바이너리로 변환해 놓는다 쳐도 어디가 어떻게 템플릿에 따라서 변환되어야 하는지 별도로 기록해 두면 소스가 굳이 필요하지는 않습니다.

newpolaris의 이미지

감사합니다.

자세한 건 컴파일러 열어봐야 되겠네요.

nEW

nEW

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.