也许我是过于复杂的事情,但是再次,我有点像干净的接口。比方说,我想要一个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