rust 指定trait作为枚举变量值?

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

我有一个类型的“A”,和各种特征,定义的行为,可以做的A。

struct A {
   pub foo: String;
   ... etc
}

trait BigChange { 
   fn big_change(a: A) -> A
}

trait SmallChange {
   fn small_change(a: A) -> A
}

struct AConcreteBigImplementation;

impl BigChange for AConcreateBigImplementation {
   fn big_change ...
}

struct AnotherConcreteBigImplementation;

impl BigChange for AnotherConcreateBigImplementation {
   fn big_change ...
}

struct AConcreteSmallImplementation;

impl SmallChange for AConcreteSmallImplementatio {
   fn small_change ... 
}

我试图创建一个枚举,可以引用任何行为,例如。

// Doesn't work
enum ChangeA {
    BigChangeOperation(BigChange),
    SmallChangeOperation(SmallChange)
}

这样我就可以轻松地传递特定的操作,并测试它们是BigChange还是SmallChanges,例如:

let oldA = A::new( ... );
match some_change {
    BigChange(b) => let newA = b(oldA)
    SmallChange(s) => let newA = s(oldA)
}

我有点理解,也许rust想在编译时知道一个特定的函数,所以也许装箱的值会有所帮助,但它没有

// Better?
enum ChangeA {
    BigChangeOperation(Box<BigChange>),
    SmallChangeOperation(Box<SmallChange>)
}

有没有可能像这样为枚举值指定一个trait,或者我错过了枚举值中传递的类型,trait,具体值之间的区别。?
Tia

35g0bw71

35g0bw711#

这似乎起作用:

trait T{}

enum E {
    T(Box<dyn T>)
}

相关问题