比较流

时间:2011-09-08 15:15:41

标签: c++ stream

我正在考虑使用流来概括我的C ++应用程序中的数据源。但是,我的代码还使用了一个资源管理器,它以类似于工厂的方式运行,除了它的主要目的是确保相同的资源不会被加载到内存中两次。

myown::ifstream data("image.jpg");
std::ifstream data2("image2.jpeg");

ResourcePtr<Image> img1 = manager.acquire(data); 
ResourcePtr<Image> img2 = manager.acquire(data);

cout << img1 == img2; // True

ResourcePtr<Image> img3 = manager.acquire(data2);
cout << img1 == img3; // False

要做到这一点,显然必须做一些检查。如果资源管理器将数据流作为输入,是否有合理的方法(可读且有效)来实现它?

3 个答案:

答案 0 :(得分:4)

您无法“比较”数据流。流不是容器;它们是数据流


顺便说一句,cout << a == b(cout << a) == b;我认为你的意思是cout << (a==b)

答案 1 :(得分:2)

抽象级别,其中数据的标识远远高于您的流。如果知道它,请考虑一下您的流将如何处理该信息。它不能对它采取行动,它只是一堆数据。就接口而言,流甚至不一定具有结束。如果你试图在那个级别将身份与它联系在一起,那么你就会对我不会感到惊讶。

尽管如此,这听起来像是ResourcePtr的合理抽象。将数据加载到ResourcePtr时可以对数据进行哈希处理,但文件路径上的键可能也一样好。

答案 2 :(得分:0)

像Tomalak说的那样,你无法比较溪流。你必须将它们包装在一个将ID与它们相关联的类中,如果它们都与文件系统上的文件相关联,可能基于绝对路径