据我所知,你不能拥有一个具有泛型类型的函数指针,我什至不认为 Rust 解析器接受这样的构造。
此外,您不能简单地切换到结构上的额外类型参数,因为结构本身不会使用它们:
struct MediaLibrary<F, P1, K, P2, B>
where
F: Fn(P1) -> bool,
P1: AsRef<Path>,
K: Fn(P2) -> B,
P2: AsRef<Path>,
B: Ord,
{
root_dir: PathBuf,
item_meta_fn: String,
self_meta_fn: String,
media_item_filter: F,
media_item_sort_key: K,
}
error[E0392]: parameter `P1` is never used
--> src/main.rs:3:24
|
3 | struct MediaLibrary<F, P1, K, P2, B>
| ^^ unused type parameter
|
= help: consider removing `P1` or using a marker such as `std::marker::PhantomData`
相反,您可以选择仅将约束应用于使用它们的函数:
struct MediaLibrary<F> {
media_item_filter: F,
}
impl<F> MediaLibrary<F> {
fn do_filter<P>(&self)
where
F: Fn(P) -> bool,
P: AsRef<Path>,
{}
}
正如消息所述,您还可以使用PhantomData
.