2009-03-02 3 views
2

생각할 비트 ... 성분 1 : ostream에서 파생 된 객체에 대한 포인터를 취하는 함수가있는 (미리 컴파일 된) 공유 라이브러리의 클래스 :템플릿 함수가 공유 라이브러리에 전달됨 (C++)

void ClassName::SetDefaultStream(std::ostream *stream) 

성분 2 :

몇 가지 일반적인 템플릿 스트림 연산자 표준 : : ostream에에서 내 자신의 클래스 유도 :

class MyStream : public std::ostream 
{ 
    public: 
     template <typename T> MyStream &operator<<(const T &data) 
     { 
     std::cout << data; 
     return *this; 
     } 
} 

이제 나는 instantiati의 주소를 전달하는 경우 이 클래스의 SetDefaultStream 메서드에 어떤 일이 생길까요? 컴파일 타임에 컴파일러는 공유 클래스의 스트림에 어떤 유형이 적용될 것인지 전혀 모르기 때문에 코드가 합성되지는 않을 것입니다. 그것은 컴파일에 실패 할 것인가? 컴파일 될 것인가? 그리고 실행될 때 충돌 할 것이고 컴퓨터에서 연기가 나올 것인가?

답변

6

기본 std :: ostream의 가상 멤버가 아니기 때문에 템플릿이 적용된 memmber는 라이브러리 내부에서 볼 수 없습니다. 문제는 발생하지 않습니다.

3

컴파일되지만 운영자는 호출되지 않습니다.

관련 문제