也許我是過於複雜的事情,但是再次,我有點像乾淨的接口。比方說,我想要一個fstream的auto_ptr專業化 - 我想要一個默認的fstream用於一般情況,但允許替換指針?auto_ptr的模板特化<T>
template <>
class auto_ptr<fstream> {
static fstream myfStream;
fstream* ptr;
public:
auto_ptr() {
// set ptr to &myfStream;
}
reset(fstream* newPtr) {
// free old ptr if not the static one.
ptr = newPtr
};
}
你會考慮一些不同的或更優雅的東西嗎?那麼如何讓這些特定編譯單元之外的東西繼續傳播?
[實際的模板是一個boost :: scoped_ptr的。]
編輯:
這是一個人爲的例子。忽略fstream - 它是爲auto_ptr提供對象的默認實例。我可能不想提供一個專門的實例,但想保留這個靜態默認對象的auto_ptr語義。
class UserClass {
public:
auto_ptr<fstream> ptr;
UserClass() { }
}
我可能不會在施工時提供一個動態對象 - 我仍然希望它有一個有意義的默認值。由於我沒有考慮所有權轉移語義,所以我的指針類指向一個靜態分配的對象並不重要,不是嗎?
您似乎在混淆兩個概念 - 自動指針和默認流的概念。這對我來說沒有多大意義。 – 2010-04-07 13:33:00
+1給尼爾。專門用auto_ptr這種方式會徹底改變它的語義:如何使用auto_ptr的人知道默認值不是NULL? –
2010-04-07 13:36:53
另外問題在於......因爲在專業化時你必須完全重新實現它,爲什麼不給它另一個名字? – 2010-04-07 13:55:00