为了能够通过动态分派返回异类集合,您需要将结果框选出来:
pub fn get_data_vector(&mut iter: DatabaseRecordIterator) -> Vec<Box<dynDbfFile>>
但是,您将得到以下错误:
| pub fn get_data_vector(&mut iter: DatabaseRecordIterator) -> Vec<Box<dyn DbfFile>> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `DbfFile` cannot be made into an object
|
Self
-这对于每个实现都是不同的。您需要将其更改为公共类型,以使trait对象安全(允许动态分派)。
另一种方法是通过枚举返回多个类型:
enum GetDataVectorResult {
Attachable(InsertableAttachable),
Attached(InsertableAttached),
}
pub fn get_data_vector(&mut iter: DatabaseRecordIterator) -> Vec<GetDataVectorResult>