在此代码中:
#![allow(dead_code)]
use std::ops::Add;
struct Foo(i32);
const X: i32 = 1;
const Y: i32 = X + X;
const A: Foo = Foo(1);
const B: Foo = A + A;
impl Add for Foo {
type Output = Foo;
fn add(self, rhs: Foo) -> Foo {
Foo(self.0 + rhs.0)
}
}
编译器说:
error[E0015]: calls in constants are limited to struct and enum constructors
--> src/main.rs:8:16
|
8 | const B: Foo = A + A;
| ^^^^^
|
note: a limited form of compile-time function evaluation is available on a nightly compiler via `const fn`
--> src/main.rs:8:16
|
8 | const B: Foo = A + A;
| ^^^^^
最好的替代是什么?
你不能。即,实施add
从字面上可以做到anythingRust 可以做的事情,包括恐慌、打印输出、读取文件、分配内存等。
您需要“手动”构建常量:
const B: Foo = Foo(2);
您还可以利用构建脚本 http://doc.crates.io/build-script.html这将生成 Rust 代码,然后您可以将其包含回您的程序中。
正如错误消息所说:
注意:夜间编译器可以通过以下方式获得有限形式的编译时函数评估const fn
然而,这对你现在没有帮助,因为目前无法制作特征方法const
,我怀疑Add::add
(或任何其他操作员特征)将被标记const
因为这会过于限制——阻止实施Add
使用上面列出的所有功能。我不知道专业化/子类型如何与 const 函数一起使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)