2016-08-18 2 views
3

나는이기본 복사 생성자와 템플릿 변환 생성자를 사용할 수 있습니까?

template <typename T> 
class MyClass 
{ 
    T myData; 

public: 
    T getValue() { return myData; }   

    template <typename V> 
    MyClass(const MyClass<V>& other) : 
     myData((T) other.getValue()) 
    { 
    } 
}; 

같은 클래스 이것은 내가 (V = T 용) 복사 생성자를 제공한다는 의미가 있고, 따라서 나는 등 기본 이동 생성자

을하지 않는이 링크 Why no default move-assignment/move-constructor?에 따라 경우

템플릿 생성자를 변환 생성자로만 사용할 수있는 방법이 있습니까? V! = T?

+0

클래스에 사용자 정의 복사 생성자가 없습니다. 복사 생성자는 절대로 템플릿이 아닙니다. –

답변

5

귀하의 전제가 잘못되었습니다. 생성자 템플릿은 복사 (또는 이동) 생성자를 인스턴스화하는 데 사용되지 않습니다. 즉, 복사/이동 생성자는 멤버 함수 템플릿이 적절한 복사/이동 서명을 사용하여 생성자를 생성 할 수있는 경우에도 항상 템플릿이 아닌 멤버 함수입니다.

그렇기 때문에 클래스에는 여전히 템플릿 외에도 일반 복사 생성자가 있습니다.

+0

우리가 복사 생성자를 명시 적으로'delete'd한다면, 템플릿 대신 그 템플릿을 사용할 것입니까? – Bathsheba

+3

@ Bathsheba 나는 그것을 크게 의심합니다. 삭제 된 함수가 있으므로 여전히 선택됩니다. 그것은 그 사용이 부적절한 것입니다. – Angew

관련 문제