Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 生锈,2个板条箱,具有重叠的专用功能_Rust_Private_Encapsulation_Organization_Code Organization - Fatal编程技术网

Rust 生锈,2个板条箱,具有重叠的专用功能

Rust 生锈,2个板条箱,具有重叠的专用功能,rust,private,encapsulation,organization,code-organization,Rust,Private,Encapsulation,Organization,Code Organization,我正在用rust编写两个数据结构容器,它们具有不同的API,但大约50%的幕后功能是相似的。FWIW,第一个是存储可比较的std::cmp::Ord数据的红黑树,另一个是具有类似API的列表的容器,不要求数据具有可比较性,并使用与红黑树排序类似的缓冲区 我认为通常这两个容器数据结构都会作为库存储在两个不同的板条箱中。但它们共享一些私有功能,如树再平衡。我坚持不维护相同私有相当复杂代码的两个版本,因此我认为我唯一剩下的选择是将这两个数据结构合并到同一个板条箱中。还有更好的选择吗 还有更好的选择吗

我正在用rust编写两个数据结构容器,它们具有不同的API,但大约50%的幕后功能是相似的。FWIW,第一个是存储可比较的std::cmp::Ord数据的红黑树,另一个是具有类似API的列表的容器,不要求数据具有可比较性,并使用与红黑树排序类似的缓冲区

我认为通常这两个容器数据结构都会作为库存储在两个不同的板条箱中。但它们共享一些私有功能,如树再平衡。我坚持不维护相同私有相当复杂代码的两个版本,因此我认为我唯一剩下的选择是将这两个数据结构合并到同一个板条箱中。还有更好的选择吗

还有更好的选择吗

对。制作第三个装有管道的板条箱,并根据它制作两个瓷质板条箱。他们不需要公开管道,保持封装


这是相当普遍的。例如,regex陶瓷板条箱依赖于regex语法管道板条箱,但不暴露此板条箱中的任何内容。就正则表达式的用户而言,正则表达式语法并不存在。它们可以做到。

这种方法有命名约定吗?对于简单的交友任务来说,似乎有很多开销,可能更像是监视一个类。我不认为这种板条箱有命名约定。但拥有一个有3个板条箱的货物工作区几乎不需要任何开销。既然你提到FrimEnter,我猜你是来自C++,但是如果你想在C++中提供2个数据结构作为2个单独的库,那么你也将最终隐藏第三个库中的公共管道。