gpt4 book ai didi

reference - Vec 到 &[&Path] 没有分配?

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

我有返回 Vec<PathBuf> 的函数和接受 &[&Path] 的函数,基本上是这样的:

use std::path::{Path, PathBuf};

fn f(paths: &[&Path]) {
}

fn main() {
let a: Vec<PathBuf> = vec![PathBuf::from("/tmp/a.txt"), PathBuf::from("/tmp/b.txt")];

f(&a[..]);
}

是否可以转换Vec<PathBuf>&[&Path]没有内存分配?

如果不是,我应该怎么改f接受带 Path 的切片的签名和 PathBuf

最佳答案

Is it possible to convert Vec<PathBuf> to &[&Path] without memory allocations?

否,正如 How do I write a function that takes both owned and non-owned string collections? 所回答的那样;一个PathBuf和一个 Path具有不同的内存布局(答案使用 Stringstr ;概念相同)。

how should I change f signature to accept slices with Path and PathBuf?

再次按照 How do I write a function that takes both owned and non-owned string collections? 中的建议, 使用 AsRef :

use std::path::{Path, PathBuf};

fn f<P>(paths: &[P])
where P: AsRef<Path>
{}

fn main() {
let a = vec![PathBuf::from("/tmp/a.txt")];
let b = vec![Path::new("/tmp/b.txt")];

f(&a);
f(&b);
}

这不需要额外的堆分配。

关于reference - Vec<PathBuf> 到 &[&Path] 没有分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42735801/

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