저는 오래전에 작성된 Visual C++ (Visual Studio 7.1 버전) 및 Intel C++ 컴파일러 11.0으로 컴파일 된 C++ 코드를 포팅 해 왔으며 대상 플랫폼은 Linux입니다 (Suse x86- 64) 문제는이C++ 템플릿 클래스 상속
FileA.h
template<typename T, int dim>
class A
{
public:
A(){};
~A(){};
protected:
void foo1(){};
}
FileB.h
#include "FileA.h"
template<typename T>
class B : public A<T, 2>
{
public:
B(){};
~B(){};
void foo(){ foo1(); }
}
같은 그 코드는 GCC 4.3.2 인텔 C++ 컴파일러 11.1
로
MAIN.CPP이
#include "FileB.h"
int main()
{
B<float> b = B<float>();
}
리눅스 (인텔 C++ 11.1, GCC 4.3.2)에 컴파일하지만, 완벽하게 Windows에서 컴파일하지 않습니다 (비주얼 C++ 7.1, 인텔 C++ 11.0), althow에게 그것을 확실하게 의존해서는 안 플랫폼에서. GCC는 foo1()을 foo1 (T a)로 변경하면 작동하지만 코드를 변경할 수없고 최종 릴리스에 Intel C++를 사용해야 함을 알립니다.
누군가가 조언을 해줄 수 있다면 기쁠 것입니다.
네, 고맙습니다. Windows에서 Visual C++ 및 Intel C++ 11.0의 코드가 적합한 이유는 여전히 있습니다. – nexx
@nexx : Visual C++는 종속 이름에 악명 높은 편입니다. 이것은 ** 표준 **이 아니며 ** 변경 가능성이 거의 없습니다 **. 'typename'을 잊어 버리거나 종속 함수 호출을 명시 적으로 한정하는 것을 잊어 버릴 수 있습니다. –
사실 Visual C++ (7.1)이 표준 밖에 있지만, Windows 버전이 11.0이고 Linus 버전이 11.1 인 것을 고려하면 Intel C++에 대해서는 놀랄 일이 아닙니다. – nexx