【发布时间】:2013-03-28 13:09:16
【问题描述】:
我目前正在研究一些将复杂的 CGAL 对象实例传输到不同进程的方法。在另一篇文章中,我询问了自定义分配器,但另一种方法是字符串流。 (仅供参考,共享内存不是一个选项)
当前的 CGAL::Nef_polyhedron_3 提供 iostreaming:
// In main process
Nef_polyhedron_3 NP3;
stringstream ss;
ss << NP3;
sendToOtherProcess(ss.str());
// In separate process
stringstream ss(stringFromOtherProcess);
Nef_polyhedron_3 NP3;
ss >> NP3;
现在,输出流很慢,输入流慢了四倍。
原因(我猜)是所有的选角。可以在这里找到执行它的类:https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_3/SNC_io_parser.h
仅获取班级成员之一的 sn-p (ln 1481):
in >> hx >> hy >> hz >> hw;
vh->point() = Point_3(hx,hy,hz,hw);
为数千个点执行此操作需要一段时间。在输出端它更快(不知道为什么)
有没有什么方法可以提供某种二进制流,而不是所有的转换?我知道可以使用 read()、write() 写入任何二进制流,但我不能(轻松)更改 CGAL SNC_io_parser.h。我想理想情况下,我希望能够提供一个流,当被要求流式传输(无论哪种方式)时,它都会以二进制形式进行。
感谢您的任何帮助。
马科斯
【问题讨论】:
标签: c++ iostream stringstream steam