我正在考虑使用流来概括我的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
要做到这一点,显然必须做一些检查。如果资源管理器将数据流作为输入,是否有合理的方法(可读且有效)来实现它?
答案 0 :(得分:4)
您无法“比较”数据流。流不是容器;它们是数据流。
顺便说一句,cout << a == b
是(cout << a) == b
;我认为你的意思是cout << (a==b)
。
答案 1 :(得分:2)
抽象级别,其中数据的标识远远高于您的流。如果知道它,请考虑一下您的流将如何处理该信息。它不能对它采取行动,它只是一堆数据。就接口而言,流甚至不一定具有结束。如果你试图在那个级别将身份与它联系在一起,那么你就会对我不会感到惊讶。
尽管如此,这听起来像是ResourcePtr
的合理抽象。将数据加载到ResourcePtr
时可以对数据进行哈希处理,但文件路径上的键可能也一样好。
答案 2 :(得分:0)