我想使用一个函数,将两个数组与声明连接起来,如下所示:
fn concatenate<const COUNT1: usize, const COUNT2: usize>(a: [i32;COUNT1], b: [i32;COUNT2]) -> [i32;{COUNT1+COUNT2}];
Run Code Online (Sandbox Code Playgroud)
问题是返回类型。这是具体的错误:
error: generic parameters may not be used in const operations
--> src\main.rs:4:101
|
4 | fn concatenate<const COUNT1: usize, const COUNT2: usize>(a: [i32;COUNT1], b: [i32;COUNT2]) -> [i32;{COUNT1+COUNT2}] {
| ^^^^^^ cannot perform const operation using `COUNT1`
|
= help: const parameters may only be used as standalone arguments, i.e. `COUNT1`
Run Code Online (Sandbox Code Playgroud)
这个函数似乎很容易单态化,我不明白为什么编译器不允许它。rust book 只声明(两次)这是不允许的,但没有解释原因:
const 参数可以在任何可以使用 const 项的地方使用,但在类型或数组重复表达式中使用时,它必须是独立的(如下所述)。
作为进一步的限制,const 参数只能作为类型或数组重复表达式内的独立参数出现。
有谁知道这种模式与 Rust 模型有何不同,因为至少从我的角度来看,它绝对不是实现限制。如果有帮助的话,这是整个函数:
error: generic parameters may …Run Code Online (Sandbox Code Playgroud)