Rust 锈蚀:从<_&燃气轮机;用于usize、u64、u32等
让我们做一个结构。我想为所有uint类型实现From。有没有简单的方法可以做到这一点 例如,我想写这段代码Rust 锈蚀:从<_&燃气轮机;用于usize、u64、u32等,rust,type-conversion,Rust,Type Conversion,让我们做一个结构。我想为所有uint类型实现From。有没有简单的方法可以做到这一点 例如,我想写这段代码 impl From<S> for usize { fn from(s: S) -> usize { s.field_a + s.field_b } } impl From<S> for u64 { fn from(s: S) -> u64 { s.field_a + s.field_b
impl From<S> for usize {
fn from(s: S) -> usize {
s.field_a + s.field_b
}
}
impl From<S> for u64 {
fn from(s: S) -> u64 {
s.field_a + s.field_b
}
}
impl From<S> for u32 {
fn from(s: S) -> u32 {
s.field_a + s.field_b
}
}
...
impl From供使用{
fn from(s:s)->使用{
s、 场a+s场b
}
}
u64的impl From{
fn从(s:s)->u64{
s、 场a+s场b
}
}
u32的impl From{
fn从(s:s)->u32{
s、 场a+s场b
}
}
...
作为
impl From for uint{
fn来自(s:s)->uint{
s、 场a+s场b
}
}
我的第一个想法是用性格特征把所有的UINT分类。以下是我的尝试:
use std::ops::Add;
impl From<S> for impl From + Add {
fn from<T: From + Add>(s: S) -> T {
T::from(s.field_a) + T::from(s.field_b)
}
}
使用std::ops::Add;
impl From用于impl From+Add{
fn从(s:s)->T{
T::from(s.field_a)+T::from(s.field_b)
}
}
但这不起作用,而且感觉很简陋(UINT不仅仅是来自和添加的东西)
不知道从这里到哪里去!任何帮助都将不胜感激 宏可以工作
结构{
字段a:u8,
字段b:u8,
}
宏规则!从{
($($uint\U类型:ty),*)=>{
$(
$uint\U类型的impl From{
fn从(s:s)->$uint\u类型{
:from(s.field_a)+:from(s.field_b)
}
}
)*
}
}
向我们恳求!(u8、u16、u32、u64、u128);
宏可以工作
结构{
字段a:u8,
字段b:u8,
}
宏规则!从{
($($uint\U类型:ty),*)=>{
$(
$uint\U类型的impl From{
fn从(s:s)->$uint\u类型{
:from(s.field_a)+:from(s.field_b)
}
}
)*
}
}
向我们恳求!(u8、u16、u32、u64、u128);
这看起来很有效,但我有点失望,没有更简单的方法。如果没有人想出更简单的办法,我会在几天后接受这个答案。我只想回来说声谢谢!我一直在用这个答案!这看起来很有效,但我有点失望没有更简单的方法。如果没有人想出更简单的办法,我会在几天后接受这个答案。我只想回来说声谢谢!我一直在用这个答案!
use std::ops::Add;
impl From<S> for impl From + Add {
fn from<T: From + Add>(s: S) -> T {
T::from(s.field_a) + T::from(s.field_b)
}
}
struct S {
field_a: u8,
field_b: u8,
}
macro_rules! impl_from_s {
($($uint_type: ty),*) => {
$(
impl From<S> for $uint_type {
fn from(s: S) -> $uint_type {
<$uint_type>::from(s.field_a) + <$uint_type>::from(s.field_b)
}
}
)*
}
}
impl_from_s!(u8, u16, u32, u64, u128);