rust 约束泛型函数的返回类型

qni6mghb  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(100)

我有这个功能:

fn io_convert_int<F, T>(from: F) -> io::Result<T>
where
    T: TryFrom<F>,
    <T as TryFrom<F>>::Error: std::error::Error + Send + Sync + 'static,
{
    from.try_into().map_err(|e| io::Error::new(InvalidInput, e))
}

我想调用它,只指定返回类型,并让T被推断出来。我知道我能做

io_convert_int::<_, SomeT>(some_f)

但是当我不想依赖于函数的类型参数的排列时,这可能是一个问题(类型参数通常非常复杂或容易改变)。我想做的是

io_convert_int(some_f)?::<SomeT>

我该怎么做?我能想到的唯一其他方法是有一个预期返回类型的变量,如

let to: SomeT = io_convert_int(some_f)?;

这样做的缺点是必须拆分表达式,而我并不总是可以这样做。

vsnjm48y

vsnjm48y1#

曾经有type ascripiton,但后来变成了de-rfc'd
目前我认为你的额外变量是最好的方法,尽管你可以使用std::convert::identity来内联Assert类型:

identity::<SomeT>(io_convert_int(some_f)?)

相关问题