C++표준은 (ISO/IEC 14882), stroupstrupTCPL 3rd에는 export라는 키워드를 써서 template의 선언과 구현을 .h .cpp로 구분하는 것을 표준으로 정의하고 있지만 지금의 컴파일러가(gcc, codewarrior, vc7.1 등) 그걸 구현하지 않고 있습니다. (구현 못하고 있다고 하는것이 정확한 표현이겠죠. partail template specialization이 표준은 1998년에 만들어 졌지만 vc는 2003년에 gcc도 3.x에 와서야 비로서 구현될걸 보면 알수있습니다.)
여러가지 이론이 있을 수 있지만,
제가 봤던 문구 중에 가장 기억에 남는 것은...
실질적 malloc이 일어나지 않는 것을 헤더에, malloc이 일어나는 것은 본체(?)에 둔다는 문장이었는데요.
아주 직관적이면서 기억하기 쉽고 단순하면서, 고민을 덜게 해주죠... 8)
C++표준은 (ISO/IEC 14882), stroupstrupTCPL 3rd에는 export라는 키워드를 써서 template의 선언과 구현을 .h .cpp로 구분하는 것을 표준으로 정의하고 있지만 지금의 컴파일러가(gcc, codewarrior, vc7.1 등) 그걸 구현하지 않고 있습니다. (구현 못하고 있다고 하는것이 정확한 표현이겠죠. partail template specialization이 표준은 1998년에 만들어 졌지만 vc는 2003년에 gcc도 3.x에 와서야 비로서 구현될걸 보면 알수있습니다.)
export는 대부분의 컴파일러가 구현 "안하고" 있습니다. 벤더들은 이 키워드를 비난하며 지원하지 않을 것이다고 이야기 합니다.
..
글쎄요..꼭 그럴필요가 있을까요?
그건 마치 define문을 header에만 써야 된다는 것과 유사하게
들립니다만..
지역적으로 사용되는 것이라면 해당 소스에서 정의하셔도 되지 않을까요?
이상 C 적인 생각이었습니다.--;
C++은 안해본지 오래되서 모르겠지만..마찬가지일꺼라 생각됩니다..
Header에 넣는 것은 선언만 넣습니다.가끔, static 객체도
Header에 넣는 것은 선언만 넣습니다.
가끔, static 객체도 넣긴하구요.
c, cc 등에 넣는 것은 정의나 local 선언 등을 넣습니다.
그렇게 하는 주된이유는 header만으로는 파일간 공유되는 전역으로 참조되는 object 심볼들이 만들어지기 때문입니다.
template은 그 자체만으로는 정의처럼 보이는 것 조차도 실은 위에 해당하는 심볼이 만들어지지 않습니다. 사용되는 곳에서 만들어지는 것이지요.
사용되는 순간 적당한 형이 완성이 되면서 만들어지는 것이므로 c, cc에 두는 것은 이상한 꼴이 됩니다.
---
http://coolengineer.com
음... 그것 때문이 아니라..보통 c++ 코딩을 할 경우 .h랑 .
음... 그것 때문이 아니라..
보통 c++ 코딩을 할 경우 .h랑 .cpp 로 나누어서 만든 후에..
.o를 만들고.. Link해서 실행 파일을 만드는데..
template을 만들경우.. 위와 같이 하면 에러가 나거든요.. 컴파일 할 때..
그래서 #include *.cpp 같은 편법을 쓰기도 하지만..
실제론 header로만 사용하는 거나 마찬가지거든요..
궁금한건 왜 저기서 컴파일 할 때 에러가 나냐 하는거거든요..
export를 쓰면 된다는 이야길 들은 거 같긴한데..
지원하는 컴파일러가 없다는 이야기도 들었거든요..ㅠㅠ
#include "templateblah.cpp"이렇게 쓰는 것이
#include "templateblah.cpp"
이렇게 쓰는 것이 편법이 아닙니다.
보기 흉할 뿐이죠..
#include "templatebla-impl.h"
이렇게 이름을 주기도 하죠 이름에 impl 이 들어가도록..
만들어진 .o 파일을 nm 해보세요. object가 만들어지지 않습니다. 단지 syntax check만 할 뿐입니다.
template은 형이 없이 만들어진 것인데 어떤 컴파일러가 object를 만들어내고 link할 수 있겠습니까.. :)
---
http://coolengineer.com
말씀하신데로.. object가 않 만들어지는 이유가 궁금한거지요..왜
말씀하신데로.. object가 않 만들어지는 이유가 궁금한거지요..
왜 않 만들어질까요..??
[quote="첫번째글"]사용되는 순간 적당한 형이 완성이 되면서 만들어
그것은 형이 없이 정의되어 있기 때문입니다.
왜 형이 없냐고 물어 보신다면... 그것은...template이기 때문이지요.
(맏이라서 그런가.. :))
---
http://coolengineer.com
C++표준은 (ISO/IEC 14882), stroupstrupTCPL
C++표준은 (ISO/IEC 14882), stroupstrupTCPL 3rd에는 export라는 키워드를 써서 template의 선언과 구현을 .h .cpp로 구분하는 것을 표준으로 정의하고 있지만 지금의 컴파일러가(gcc, codewarrior, vc7.1 등) 그걸 구현하지 않고 있습니다. (구현 못하고 있다고 하는것이 정확한 표현이겠죠. partail template specialization이 표준은 1998년에 만들어 졌지만 vc는 2003년에 gcc도 3.x에 와서야 비로서 구현될걸 보면 알수있습니다.)
Life rushes on, we are distracted
오래전에 공부할 때 본 문구 입니다만...
여러가지 이론이 있을 수 있지만,
제가 봤던 문구 중에 가장 기억에 남는 것은...
실질적 malloc이 일어나지 않는 것을 헤더에, malloc이 일어나는 것은 본체(?)에 둔다는 문장이었는데요.
아주 직관적이면서 기억하기 쉽고 단순하면서, 고민을 덜게 해주죠... 8)
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
[quote="yielding"]C++표준은 (ISO/IEC 14882)
export는 대부분의 컴파일러가 구현 "안하고" 있습니다. 벤더들은 이 키워드를 비난하며 지원하지 않을 것이다고 이야기 합니다.
C++ 표준화 위원들 사이에서도 export는 평이 좋지 못합니다.
- 죠커's blog / HanIRC:#CN
댓글 달기