我在加速C++並編寫一個簡單的Handle
類作爲智能指針的示例。這使用virtual ctor idiom使用虛擬clone()
函數。到現在爲止還挺好。但是當我想用我的Handle
來控制那些不提供clone()
的類時該怎麼辦?如何爲沒有clone()成員的類編寫句柄?
的方法在書中建議是建立一個全球性的clone
功能和使用模板特(東西我看到的第一次),這樣,如果clone()
被稱爲與一個特定的參數,可以編寫代碼來處理這種情況。
我的問題是:這意味着我必須寫一個clone()
版本每型類的,我想像我的用戶可以使用Handle
用。這似乎很難!有沒有更優雅和/或簡單的方法來解決這個問題? auto_ptr或boost :: shared_ptr之類的東西有可能在沒有繁瑣的clone()
定義的情況下提供此功能?
爲了完整起見,這裏是我的Handle
類實現:
template <class T> class Handle
{
public:
Handle() : p(0) {}
Handle(T* t) : p(t) {}
Handle(const Handle& s) :p(0) { if (s.p) p = s.p->clone(); }
const Handle& operator=(const Handle&);
~Handle() { delete p; }
operator bool() { return p; }
T& operator*() { if (p) return *p; else throw std::runtime_error("Handle not bound"); }
T* operator->() { if (p) return p; else throw std::runtime_error("Handle not bound"); }
private:
T* p;
};
謝謝!
使用clone()不是非常類似C++。 – 2010-08-29 00:58:53