【发布时间】:2023-04-06 15:41:01
【问题描述】:
我正在使用 Rust 中的任意表达式求值器,
以Add运算符为例:
fn eval_add<T: ?Sized + Add<T, Output=T>>(l: Rc<Any>, r: Rc<Any>) -> Rc<Any> {
l.downcast_ref::<Add<T, Output=T>>().unwrap() +
r.downcast_ref::<Add<T, Output=T>>().unwrap()
}
我从编译器得到这样的错误:
错误:无法在 trait 对象上调用
downcast_ref方法
很明显,编译器不知道如何将Any 转换为std::ops::Add。
那么做这种事情的最佳做法是什么?
【问题讨论】:
-
你能详细说明你的目标是什么吗?制作一个可以包装所有可能的
Add操作的函数,还是别的什么?使用Rc和Any有要求吗? -
另外请提供minimal reproducible example。您提供的代码(添加了相关导入)对我产生了不同的错误:错误[E0277]:
T类型的值的大小在编译时无法知道 -
您的意思是写
T: Sized而不是T: ?Sized?
标签: generics rust traits dynamic-typing