Comment écrire de la classe de Modèle constructeur de copie
Comment écrire constructeur de copie pour une classe de modèle. De sorte que si le paramètre du modèle est d'une autre classe définie par l'utilisateur, il est constructeur de copie est également appelée.
Qui suit est ma classe
template <typename _TyV>
class Vertex {
public:
Vertex(_TyV in) : m_Label(in){ }
~Vertex() { }
bool operator < ( const Vertex & right) const {
return m_Label < right.m_Label;
}
bool operator == ( const Vertex & right ) const {
return m_Label == right.m_Label;
}
friend std::ostream& operator << (std::ostream& os, const Vertex& vertex) {
return os << vertex.m_Label;
}
_TyV getLabel() { return m_Label;}
private:
_TyV m_Label;
public:
VertexColor m_Color;
protected:
};
Souhaitez-vous que le constructeur de copie qui peut accepter n'importe quel
Ce ne serait pas un constructeur de copie.
class
comme argument ?Ce ne serait pas un constructeur de copie.
OriginalL'auteur Avinash | 2011-10-03
Vous devez vous connecter pour publier un commentaire.
En supposant
_TyV
est un type de valeur:Ne sont pas ces noms dans les instances de classe réservées par la mise en œuvre, par le chemin?
que faire si le _TyV est pointeur ou une référence
Il aurait tout aussi bien, je ne sais pas pourquoi j'ai écrit ça. Répare.
Si c'est une référence, vous ne pouvez pas faire un opérateur d'affectation. Si c'est un pointeur, et que vous voulez une copie en profondeur, vous aurez à se spécialiser la classe.
oui, il est appelé injecté nom de la classe.
OriginalL'auteur K-ballo
A) pas du tout, juste compter sur le compilateur par défaut fourni par; ou b) par tout en invoquant le constructeur de copie de la membre:
Le point est bien sûr que le compilateur par défaut fourni par constructeur de copie n'est pas précisément la même chose: il invoque le constructeur de copie de chaque membre un par un. Ainsi, pour une classe qui est composé de intelligent objets membres, le constructeur de copie par défaut doit être la meilleure possible.
Vous pouvez également explicitement par défaut le constructeur de copie dans C++0x. Aussi cette place le
CopyConstructible
exigence sur votre argument de modèle.OriginalL'auteur Kerrek SB
Mais je ne pense pas que vous devez définir explicitement le constructeur par copie, à moins que la classe ont pointeur membre de données et que vous voulez faire de copie en profondeur des objets. Si vous n'avez pas pointeur des données sur les membres, alors la valeur par défaut constructeur par copie généré par le compilateur, ce serait suffisant.
OriginalL'auteur Nawaz