gpt4 book ai didi

rust - 如何创建具有泛型类型参数的函数向量?

转载 作者:行者123 更新时间:2023-11-29 08:14:03 25 4
gpt4 key购买 nike

我有几个具有相同泛型类型签名的函数:

pub fn selection_sort<T: Ord + Debug>(v: &mut [T]) {}

pub fn insertion_sort<T: Ord + Debug>(v: &mut [T]) {}

我想将它们放入 Vec 或数组中,以便我可以遍历它们并对它们运行相同的测试,如下所示:

let mut sorters: Vec<fn<T: Ord + Debug>(v: &mut [T])> = Vec::new();

但是我得到这个编译器错误:

error: expected `(`, found `<`
--> src/main.rs:8:28
|
8 | let mut sorters: Vec<fn<T: Ord + Debug>(v: &mut [T])> = Vec::new();
| ----------- ^
| |
| while parsing the type for `mut sorters`

如何将这些函数放入向量中?是否有更好的方法来针对满足此签名的函数重用测试?

我正在使用 Rust 1.24.0。

最佳答案

您不能拥有泛型类型的函数指针。您需要为 T 选择一个特定类型:

use std::fmt::Debug;

pub fn selection_sort<T: Ord + Debug>(v: &mut [T]) {}

pub fn insertion_sort<T: Ord + Debug>(v: &mut [T]) {}

fn main() {
let sorters_u8: &[fn(&mut [u8])] = &[selection_sort, insertion_sort];
let sorters_bool: &[fn(&mut [bool])] = &[selection_sort, insertion_sort];
}

这里的直觉是函数指针必须指向某物。在为函数提供特定类型之前,不会生成任何实际代码 — 编译器无法创建无限数量的函数,以防万一稍后选择其中一个。

另见:

关于rust - 如何创建具有泛型类型参数的函数向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49264428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com