저는 녹슨에게 매우 익숙해서 용어가 혼란 스러울 수 있습니다.연관된 유형이있는 형질을 박스에 넣는 방법?
일부 해시 작업을 위해 hashes 상자를 사용하고 런타임에 사용할 알고리즘 (sha256, sha512 등)을 동적으로 선택하고자합니다.
나는 이런 식으로 뭔가를 쓰고 싶습니다
let hasher = match "one of the algorithms" {
"sha256" => Box::new(Sha256::new()) as Box<Digest>,
"sha512" => Box::new(Sha512::new()) as Box<Digest>
// etc...
};
나는 종류의 Digest
에서 요구하는 관련 유형이 지정되지 않기 때문에 문제가 해결되지 않는 것을 얻는다. 내가 그들을 채우기 위해 시도하는 경우 :
"sha256" => Box::new(Sha256::new()) as Box<Digest<<OutputSize = U32, BlockSize = U64>>>,
나는이 오류와 함께 왼쪽 해요 : the trait 'digest::Digest' cannot be made into an object
합니다. 어쨌든 match
은 다른 알고리즘이 다른 관련 유형을 가진 경우 약간 다른 유형을 반환하기 때문에이 방법은 실패 할 것이라고 생각합니다.
나는 분명한 뭔가를 놓치고 있습니까? 어떻게 특성을 구현하는 무언가의 인스턴스를 동적으로 생성 한 다음 그 것을 유지하고 특성 인터페이스를 통해 사용할 수 있습니까?
관련 유형없이 실제로 필요한 인터페이스를 구현하는 래퍼 유형과 특성을 만들 수 있습니다. 권투 같은 특성은 작동합니다. – user4815162342
관련 : [관련 유형별로 다른 객체의 벡터를 만들 수있는 방법은 무엇입니까?] (https://stackoverflow.com/q/28932450/155423) – Shepmaster
@ user4815162342 그럴 가치가 있다고 생각합니다. – Shepmaster