2012-08-17 15 views
5

Supponiamo di scrivere una classe template con un costruttore di template, in questo modo.Il costruttore del modello nella classe template deve essere definito nella definizione della classe?

template<typename T> 
class X{ 


    template<typename S> 
    X(X<S> x){} 
}; 

compila bene. Tuttavia, quando cerco di definire il costruttore di fuori della dichiarazione modello, in questo modo:

template<typename T> 
class X{ 


    template<typename S> 
    X(X<S> x); 
}; 


template<typename T, typename S> 
X<T>::X(X<S> y){} 

ricevo il seguente errore:

error: invalid use of incomplete type ‘class X<T>’ 

perché? Non è possibile definire un costruttore di template di una classe template al di fuori della dichiarazione di classe?

risposta

10

Hai due livelli di modelli, e devono indicare separatamente.

template<typename T> 
template<typename S> 
X<T>::X(X<S> y){} 
5

Prova questo:

template<typename T> 
template<typename S> 
X<T>::X()(X<S> y) 
{ 
} 
4

La classe ha un unico parametro di template, e si ha essenzialmente una funzione di modello all'interno di esso, quindi è necessario

template<typename T> 
template <typename S> 
X<T>::X(X<S> y){} 
Problemi correlati