是否可以使用std :: map处理std :: ofstream? [英] Is it possible to handle std::ofstream with std::map?

查看:208
本文介绍了是否可以使用std :: map处理std :: ofstream?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在c ++中处理文件映射说不,应该使用 std :: map< std :: string,std :: ofstream *> ,但这会导致 new delete 操作,这并不是那么整齐。

"Handling map of files in c++" says no, one shall use std::map<std::string, std::ofstream*>, but this leads to the new and delete actions, which is not so neat.

由于 std :: ofstream是否可移动?是的!并且可以使用以下方法 std :: map<> :: insert不可复制对象和统一初始化,是否可以使用 std :: map ofstream 的集合$ c>?这样一来,您就不必担心关闭文件流和删除来释放内存了。

Since "Is std::ofstream movable? Yes!" and it's possible to "std::map<>::insert using non-copyable objects and uniform initialization", is it possible to handle a collection of ofstream using std::map? so that one won't worry about closing filestreams and delete to release memory.

我可以在使用过程中妥协这一点 std :: map< std :: string,std :: ofstream> ,仅创建,使用(写)并关闭,而不是复制。

I can compromise that during using std::map<std::string, std::ofstream>, only create, use (it to write) and close, not to copy it.

推荐答案

是的。参见下面的示例代码。

Yes it is possible. See sample code below.


我可以在使用 std :: map< std :: string,std的过程中妥协这一点:: ofstream> ,仅创建,使用(写)并关闭(而不是复制)。

I can compromise that during using std::map<std::string, std::ofstream>, only create, use (it to write) and close, not to copy it.

它们不可复制,因此在您的最终评论中,您是正确的,将无法复制它。

They are not copyable, so in your final comment, you are correct, you will be unable to copy it. You can move assign though, if that's what you want to do.

#include <iostream>
#include <fstream>
#include <map>

int main()
{
    std::map<std::string, std::ofstream> map;
    map.emplace("foo", std::ofstream("/tmp/foo"));
    map.emplace("bar", std::ofstream("/tmp/bar"));

    map["foo"] << "test";
    map["foo"].flush();

    std::ifstream ifs("/tmp/foo");
    std::string data;
    ifs >> data;

    std::cout << data << '\n';

    return 0;
}

输出:


test

test

这篇关于是否可以使用std :: map处理std :: ofstream?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆