Почему мне не нужно реализовывать черту Any для типа, хотя это и требуется? - PullRequest
0 голосов
/ 15 ноября 2018

Когда я определяю черту, я понимаю, что названия черт справа от : требуются каждый раз, когда используется левая сторона. Если это так, почему следующий компилятор:

use std::any::Any;

trait Trait: Any {}

struct Thing {}

impl Trait for Thing {}

Следующее не компилируется (что соответствует моему пониманию того, что правильно)

trait RequiredTrait {}
trait Trait: RequiredTrait {}

struct Thing {}

impl Trait for Thing {}

1 Ответ

0 голосов
/ 15 ноября 2018

std::any содержит реализации :

impl<T> Any for T
where
    T: 'static + ?Sized, 

Это означает, что любой тип реализует Any, если все содержащиеся в нем ссылки равны 'static, а тип имеет размер. Ваша Thing структура отвечает обоим этим требованиям, поэтому она реализует Any и ваш код компилируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...