2016-11-28 9 views
2
サイズの

ような構造を見ていません。しかし、コンパイルは次のエラーを与える:錆コンパイラは、私は次のように特性を定義しようとしています

error[E0277]: the trait bound `Parameterisable + 'static: std::marker::Sized` is not satisfied 
    --> src/main.rs:10:32 
    | 
10 | pub struct ParameterCollection(Vec<Parameter<Parameterisable>>); 
    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ trait `Parameterisable + 'static: std::marker::Sized` not satisfied 
    | 
    = note: `Parameterisable + 'static` does not have a constant size known at compile-time 
    = note: required by `Parameter` 

私はVecSizedでなければならないことthis postから認識していますが、Parameterが(理由Boxの)サイズにする必要があると思われるので、どのように私はParameterであることを錆コンパイラを説得んa Sizedタイプ?

+3

'::?パラメータ化+ Sized'

だから正しい変更が?Sizedバインドを追加することですか? – Dogbert

+0

ありがとうございました...うまくいきました...私は試しました... 'pub構造体パラメータ(& 'static str、Box )A:サイズ済み しかし、これはうまくいかなかった –

答えて

3

Rustの型パラメータは、特に明記しない限り(?Sizedの結合を追加することによって)implicit Sized boundです。

そこでParameter構造体宣言は有効である:Parameter<T>&'static strので、常にそれ自体のサイズであり、Box<A>が常に大きさで

pub struct Parameter<A: Parameterisable+Sized>(&'static str, Box<A>); 

留意されたいです。縛られているだけでTのサイズも合わせる必要があります。

エラーメッセージがこれをバックアップします。 ParameterisableSizedではなく、Parameter<Parametrerisable>Sizedではありません。

pub struct Parameter<A: Parameterisable+?Sized>(&'static str, Box<A>); 
関連する問題