J'ai une implémentation de clone_ptr, comme cela a été montré dans la question this et j'ai un problème où je dois créer un clone_ptr à partir d'un pointeur brut renvoyé par une fonction.Convertir un pointeur brut en un clone_ptr
Voici le code:
DOMDocument* doc = impl->createDocument(
0, // root element namespace URI.
XML::X(docname.c_str()), // root element name
0); // document type object (DTD).
document.get() = *doc; //No way to assign clone_ptr document to raw doc pointer
Où document
& impl
sont déclarés comme suit:
clone_ptr<DOMImplementation, default_clone<DOMImplementation> > impl;
clone_ptr<DOMDocument, default_clone<DOMDocument> > document;
La fonction createDocument
ci-dessus renvoie un pointeur DOMDocument
brut et est affecté à la variable locale doc
, maintenant je veux obtenir mon document clone_ptr et le passer réellement le pointeur brut obtenu de la fonction de document de création. Il semble cependant que le compilateur est pas trop heureux avec cela comme il est dit ce qui suit:
error C2440: '=' : cannot convert from 'xercesc_3_1::DOMDocument' to 'clone_ptr<T,Cloner>::pointer'
with
[
T=xercesc_3_1::DOMDocument,
Cloner=default_clone<xercesc_3_1::DOMDocument>
]
Alors ma question est de savoir comment puis-je permettre à un pointeur brut soit explicitement ou implicitement converti en un clone_ptr
? EDIT:
spécialisation Clone:
template<typename T>
struct default_clone
{
static T* clone(T* pPtr)
{
return pPtr ? pPtr->clone() : 0;
}
};
template<>
struct default_clone<DOMDocument>
{
static DOMDocument* clone(DOMDocument* pPtr)
{
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(XML::X("Core"));
return pPtr ? impl->createDocument(0, XML::X(""), 0) : 0;
}
};
template<>
struct default_clone<DOMImplementation>
{
static DOMImplementation* clone(DOMImplementation* pPtr)
{
return pPtr ? DOMImplementationRegistry::getDOMImplementation(XML::X("Core")) : 0;
}
};
Je ne sais pas si mes réponses à vos deux questions précédentes concernant votre clone-pointeur sont utiles, mais si elles étaient, ce serait bien si vous les acceptez. –
@ Space_C0wb0y: a ajouté un commentaire à la réponse à ma question précédente ... –