我有一個clone_ptr實現,如this問題所示,我有一個問題,我需要從函數返回的原始指針創建clone_ptr。將原始指針轉換爲clone_ptr
下面是代碼:
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
凡document
& impl
聲明如下:
clone_ptr<DOMImplementation, default_clone<DOMImplementation> > impl;
clone_ptr<DOMDocument, default_clone<DOMDocument> > document;
上述createDocument
函數返回一個原DOMDocument
指針和被分配給本地變量doc
,現在我想獲取我的文檔clone_ptr,並實際上將它從創建文檔函數中獲取的原始指針傳遞給它。這似乎但是編譯器是不是太滿意這個,因爲它說以下內容:
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>
]
所以我的問題是我怎麼能允許一個原始指針是明確或隱式轉換爲clone_ptr
? 編輯:
克隆專業化:
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;
}
};
我不知道我的答案是否對你以前的兩個問題有關你的克隆指針有用,但如果他們在哪裏,如果你接受它們會很好。 – 2010-11-03 09:06:23
@ Space_C0wb0y:對我的上一個問題的答案添加了評論... – 2010-11-03 09:11:30