이 질문의 제목은 많은 관련 질문과 매우 유사하지만이 특정 문제를 논의하는 질문을 찾지 못했습니다.
나는이 Color
매우 간단하게 다음과 같이 정의된다 종류 :
pub struct Color {
red: u8,
green: u8,
blue: u8,
}
이제 다른 라이브러리와 인터페이스하고 고정 소수점 숫자로 변환하기 위해이를 임의의 숫자 유형을 포함하는 튜플간에 변환 할 수 있으면 유용합니다.
이를 위해 상자를 사용 합니다Az
. 특성을 정의하고 Cast<T>
많은 유형에 대해 구현 From<(T, T, T)>
하므로 다음과 같이 구현할 수 있습니다.
use az::Cast;
impl<T: Cast<u8>> From<(T, T, T)> for Color {
fn from(components: (T, T, T)) -> Color {
Color {
red: Cast::cast(components.0),
green: Cast::cast(components.1),
blue: Cast::cast(components.2),
}
}
}
특성 경계는 나에게 Cast::<u8>::cast(T)
기능을 제공 하므로 모든 것이 예상대로 작동합니다.
그러나 그 반대의 구현 방법을 찾지 못하는 것 같습니다 From<Color>
. 내가 효과적으로 원하는 것은 다음과 같습니다.
impl<T> From<Color> for (T, T, T)
where
impl Cast<T> for u8 // This doesn't actually work
{
fn from(color: Color) -> (T, T, T) {
(
Cast::cast(color.red),
Cast::cast(color.green),
Cast::cast(color.blue),
)
}
}
그러나 실제로 이것을 작성하는 방법을 찾지 못하는 것 같습니다. bounds 에 대한 문서를 확인 했지만 이것을 표현할 수있는 구문을 찾을 수없는 것 같습니다.
어떻게 구현할 수 있습니까?
당신은 가깝습니다. 경계는 일반 경계와 동일한 구문을 사용합니다.
impl<T> From<Color> for (T, T, T)
where
// u8 must implement Cast<T>
u8: Cast<T>,
{
fn from(color: Color) -> (T, T, T) {
(
Cast::cast(color.red),
Cast::cast(color.green),
Cast::cast(color.blue),
)
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다