给定多个相似的结构,实现与签名匹配的函数可能很有用。
下面的简单示例很有效,但不能确保所有函数都遵循相同的函数签名。
pub trait CanCalcValue {
fn calc_value(seed: i64) -> i64;
}
impl CanCalcValue for FooStruct {
fn calc_value(seed: i64) -> i64 { /* function body! */ }
}
impl CanCalcValue for BarStruct {
fn calc_value(seed: i64) -> i64 { /* function body! */ }
}
使用特征解决了这个问题:
use some_module::CanCalcValue;
但是,现在我必须在任何地方添加calc_value
,我不会打电话给use
。
有没有办法定义一个可以使用而不必确保它在命名空间中的特征?
换句话说,有时逻辑上一个特征是有意义的,因为多个结构共享一个签名,但我避免使用它,因为在整个代码库中必须public slots:
void slot();
特征变得烦人。
注意: RFC issue tracker中有关于此主题的讨论,但目前没有RFC。
答案 0 :(得分:7)
有没有办法定义一个可以在不必确保名称空间的情况下使用的特征?
简而言之,没有。要使用特征,您必须导入它。没有特征,您就无法确保签名是相同的。