t_wの輪郭

Feedlyでフォローするボタン
Rustrustc –explain E0782dynBoxBox<dyn Foo>特質名特質オブジェクト

特質オブジェクトdyn キーワードを含んでいなければなりません。

誤ったコード例

trait Foo {}
fn test(arg: Box<Foo>) {}. // エラー!

特質オブジェクトは、実行するまでわからないが、ある特質に適合する型のメソッドを呼び出すための方法です。

特質オブジェクトBox<dyn Foo> で形成されるべきですが、上のコードでは dyn が省略されています。

このため、arg が単にヒープに確保された Foo という型ではなく、特質オブジェクトであることがわかりにくくなっています。

この問題を解決するには、特質名の前に dyn を追加します。

trait Foo {}
fn test(arg: Box<dyn Foo>){}。// ok!

2021版以前は許可されていましたが、現在はエラーとなります。

あれ