我想我需要一种与Sized
相反的trait .任何不是Sized
的东西都应该具有这一特征.我需要这样做,以避免在我的代码中为大小类型和非大小类型以不同方式专门化另一个特征时的冲突实现.在这种情况下使用?Sized
不起作用,因为它会导致冲突的实现.
为此,我定义了一个自体特征,然后在T: Sized
的情况下对T
进行了负影响.
我每晚都在使用铁 rust ,main.rs
中打开了功能auto_traits
和negative_impls
:
#![feature(auto_traits)]
#![feature(negative_impls)]
由于某种原因,dyn Any
没有实现Unsized
,尽管也没有实现Sized
.在自动实现中有隐含的Sized
要求吗?理想情况下,我希望每种类型要么扩展为Sized
,要么扩展为Unsized
,没有重叠.
use std::any::Any;
use static_assertions::assert_impl_one;
pub auto trait Unsized {}
impl<T> !Unsized for T
where
T: Sized
{
}
assert_not_impl_any!(dyn Any: Sized); // Succeeds! -> dyn Any is not Sized, as expected.
assert_impl_one!(dyn Any: Unsized); // Fails! -> dyn Any is not Unsized either??? It should be.
为什么特征Unsized
不适用于明显不是Sized
的事物?
删除否定的实现会产生相同的断言结果.dyn Any
仍然不是Unsized
.