我目前正在研究一些将复杂的 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
只取类成员之一的片段(ln 1481):
in >> hx >> hy >> hz >> hw;
vh->point() = Point_3(hx,hy,hz,hw);
为数千个点执行此操作需要一段时间。在输出端它更快(不知道为什么)
有什么办法可以提供某种二进制流,不会做所有的转换?我知道可以使用 read()、write() 写入任何二进制流,但我不能(轻松)更改 CGAL SNC_io_parser.h。我想理想情况下,我希望能够提供一个流,当被要求流式传输(无论哪种方式)时,它都会以二进制形式进行。
感激地收到任何帮助。
马科斯