Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 重载使用特征的方法_Rust_Traits - Fatal编程技术网

Rust 重载使用特征的方法

Rust 重载使用特征的方法,rust,traits,Rust,Traits,我正在努力使用Rust中涉及多种类型的特性来模拟方法重载 在C++中,我会写< /P> struct-PdlDict{ 无效更新(常量字符串&,常量字符串&,双x){…} 无效更新(常量字符串&,常量字符串&,常量字符串x){…} }; 叫它 PdlDict-d; d、 更新(123.0); d、 更新(“foo”); 对于此PdlDictstruct pub struct PdlDict { pub pdl_items: Vec<PdlItem>, } impl Pdl

我正在努力使用Rust中涉及多种类型的特性来模拟方法重载

在C++中,我会写< /P>
struct-PdlDict{
无效更新(常量字符串&,常量字符串&,双x){…}
无效更新(常量字符串&,常量字符串&,常量字符串x){…}
};
叫它

PdlDict-d;
d、 更新(123.0);
d、 更新(“foo”);
对于此
PdlDict
struct

pub struct PdlDict {
    pub pdl_items: Vec<PdlItem>,
}
impl PdlDict {
    fn new() -> PdlDict {
        PdlDict {
            pdl_items: Vec::new(),
        }
    }
}
以惯用的方式实现相同语义的更合适的方法是什么

我怀疑这是特征和模板的结合,但我想不出如何处理这个问题

编辑
注意,这个问题不是问如何使用traits实现继承。我已经在这个例子中这样做了,效果很好。它要求以上面给出的风格表达继承的方式,惯用的方式是写一些你所做的事情,然后添加人体工程学:

impl PdlDict {
    fn update<T: UpdatePdl>(&self, object_name: &str, name: &str, t: T) {
        t.update(&self, object_name, name)
    }
}
impl-PdlDict{
fn更新(&self,对象名称:&str,名称:&str,t:t){
t、 更新(&self,对象名称,名称)
}
}
"bar".update(&pdl, "r", "result");
64.0.update(&pdl, "r", "result");
impl PdlDict {
    fn update<T: UpdatePdl>(&self, object_name: &str, name: &str, t: T) {
        t.update(&self, object_name, name)
    }
}