gpt4 book ai didi

generics - 在不使用关联类型的情况下简化类型签名

转载 作者:行者123 更新时间:2023-11-29 08:16:40 32 4
gpt4 key购买 nike

有没有办法简化这里的类型签名

pub struct OrderBook<T: PriceLevel, U: PriceLadder<T>> {
levels: U,
phantom: PhantomData<T>,
}

这样

type HashBook = OrderBook<LinkedHashLevel, HashmapLadder<LinkedHashLevel>>;

可以这样写吗?

type HashBook = OrderBook<LinkedHashLevel, HashmapLadder>;

我知道关联类型,但希望能够使用具有不同价格水平实现的单一价格阶梯。

下面是完整的可编译代码...

use std::marker::PhantomData;
use std::collections::HashMap;

pub struct OrderBook<T: PriceLevel, U: PriceLadder<T>> {
levels: U,
phantom: PhantomData<T>,
}

impl<T: PriceLevel, U: PriceLadder<T>> OrderBook<T, U> {}

type HashBook = OrderBook<LinkedHashLevel, HashmapLadder<LinkedHashLevel>>;

pub trait PriceLevel {
fn new() -> Self where Self: Sized;
}

pub trait PriceLadder<T: PriceLevel> {
fn new() -> Self;
}

pub struct LinkedHashLevel {
}

impl PriceLevel for LinkedHashLevel {
fn new() -> Self {
LinkedHashLevel {}
}
}

pub struct HashmapLadder<T: PriceLevel> {
levels: HashMap<u64, T>,
}

impl<T: PriceLevel> PriceLadder<T> for HashmapLadder<T> {
fn new() -> Self {
HashmapLadder { levels: HashMap::new() }
}
}

fn main() {}

最佳答案

我认为没有必要更改类型签名。考虑到你的悲伤:

I'm aware of associated types but want to be able to use a single price ladder with different implementations of price level.

也许创建一个由价格水平实现参数化并具有固定价格阶梯的类型别名就足够了:

type HashBook<Level> = OrderBook<Level, HashmapLadder<Level>>;

关于generics - 在不使用关联类型的情况下简化类型签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38461243/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com