Ceci est juste un extrait de code expliquant la hiérarchie des classes, pas le code problématique réel
class A
{};
class B : public class C
{};
class C : public NocopyClass // constructors are private in Nocopy class
{};
template<typename T1, typename T2>
class D
public:
T1 _t1;
T2 _t2;
D(T1& t1, T2& t2) : _t1(t1),_t2(t2) {}
{
};
class E: public class D<A,B>
{
E(const& a,const& b) : D<A,B>(a,b) {}
};
fonction d'appel:
A objA;
B objB;
E objE(objA,objB);
Du programme appelant, je veux passer l'objet de A et l'objet de B à la classe E Ici, le constructeur de copie défini dans E est appelé et les objets de A et B sont copiés, ce qui à son tour en invoquant le constructeur de copie de la classe B, jusqu'à la super base constructeur de copie de classe NocopyClass, qui ne permet pas aux objets d'être copiés.
Comment modifier la fonction appelante de sorte que les constructeurs de classe de base ne soient pas appelés? Y a-t-il un moyen?
Essayez de déclarer _t1 et _t2 comme références.
template<typename T1, typename T2>
{
class D
public:
T1 &_t1;
T2 &_t2;
D(T1& t1, T2& t2) : _t1(t1),_t2(t2) {}
};
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras