- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
也许我把事情搞得太复杂了,但话又说回来,我确实有点喜欢干净的界面。假设我想要一个 fstream 的 auto_ptr 特化 - 我想要一个通用案例的默认 fstream,但允许替换指针?
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() { }
}
我可能不会在构造时提供动态对象——我仍然希望它有一个有意义的默认值。因为我不是在看所有权转移语义,所以我的指针类指向静态分配的对象真的无关紧要,不是吗?
最佳答案
这不会有好结果。最大的问题是 std::auto_ptr 在其析构函数中删除了底层对象。这意味着您的默认参数不能是静态的。您可以做出的唯一选择是在那里做很多黑客攻击,恕我直言,您在维护所有糟糕代码的同时付出的代价不值得您拥有的小优势。
关于c++ - auto_ptr<T> 的模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2592746/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!