마이크로 소프트는 extension을 가지고 있습니다. 따라서 템플릿 인스턴스화가 외부로 선언 될 수 있습니다. 따라서 암시 적으로 인스턴스화되지 않습니다. 적어도 그것이 이론입니다. 내가와 push_back을 사용하더라도 프로그램이 찾을 링크 계속 (및 DUMPBIN이와 push_back 보여줍니다 : 나는 코드VS2008 extern templates
#include <vector>
class Foo{
int i;
public:
virtual ~Foo();
};
extern template class std::vector<Foo>;
이 나에게주는
warning C4231: nonstandard extension used : 'extern' before template
explicit instantiation
그러나, 아무것도 일이 일어날 것 같다 것을 재현 시도 인스턴스화되었습니다).
만 나는 예상대로
extern template void std::vector<Foo>::push_back(const Foo&);
은 내가 링커 오류가 선언 할 때.
그래서 전체 인스턴스 (모든 멤버)를 명시 적으로 선언하여 암시 적 인스턴스화를 방지 할 수 있습니까?
나는 본다. 나는이 글을 읽을 때마다이 쪽지를 무시했다. –