본문 바로가기

진리는어디에

템플릿(template) FAQ - Visual Studio 6.0 Bugs

템플릿의 세계에 빠져 살던 요즘..

동일한 코드가 어디서는 정상적으로 돌아가고, 어디서는 이상동작을 한다거나, 컴파일이 안 되는 경우가 있는데요..
찾아보니 Visual studio의 버그로 인한 것도 있더군요. 7.0에서는 패치되었다고는 하지만…6.0도 분명히 돈 받고 팔던 것인데…오류 사항이 있으면 패치를 할 생각을 안하고 다음 버전에서 때우다니 은근히 맘에 들지 않는군요.

http://womble.decadentplace.org.uk/c++/template-faq.html <- 보다 많은 FAQ가 있습니다. 보시면 많은 도움이 될 듯..그리고 아래는 Visual studio 관련 내용만 간단히 요약 해 두었습니다.

4. Q: 왜 Visual C++ 6.0은 클래스 밖에 선언된 템플릿 멤버 함수 정의를 이해하지 못 할까요?

class my_class {
public:
    template<typename T> void func();
};

template<typename T>
void my_class::func()
{
    // implementation
}

A: 버그 입니다. 7.0에서 수정 되었습니다.

5. Q. 왜 Visual C++ 6.0에서 모든 템플릿 함수들은 똑같은 결과를 리턴 할까요?

template<typename T>
std::size_t my_sizeof()
{
    return sizeof(T);
}

A: 버그 입니다. 7.0에서 수정 되었습니다. 6.0은 템플릿 함수 객체를 템플릿 인자가 아닌, 파라메터 타입에 의해서만 구분합니다. 우회적인 해결 방법으로는 사용하지 않는 템플릿 타입의 함수 파라메터를 기본 인자로 넘겨 주어 각 템플릿 함수 객체를 구분 할 수 있습니다.


template<typename T>
std::size_t my_sizeof(T * = 0)
{
    return sizeof(T);
}
유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!