如何静态地强制泛型类型具有特定的表示形式?
How to statically enforce that a generic type has a particular representation?
我有一个通用 struct Foo<T>
想用于 FFI。例如,以下可用于内存映射实现。
use std::marker::PhantomData;
use memmap::MmapMut;
#[repr(C)]
struct Shared<T> {
foo: MmapMut,
_marker: PhantomData<T>,
}
我希望这是 FFI 安全的,所以我想强制执行 T
也必须是 repr(C)
。问题是表示不是 Rust 中的特征,因此我没有看到静态强制执行此操作的直接方法,像 struct Foo<T: ReprC>
这样的东西会很好,但据我所知不存在。可以用宏吗?
也许您可以制作一个特征,ReprC
,并将其用作您的方法的特征绑定。这不是真正重要的强制执行,但它可能比文档更好。
我有一个通用 struct Foo<T>
想用于 FFI。例如,以下可用于内存映射实现。
use std::marker::PhantomData;
use memmap::MmapMut;
#[repr(C)]
struct Shared<T> {
foo: MmapMut,
_marker: PhantomData<T>,
}
我希望这是 FFI 安全的,所以我想强制执行 T
也必须是 repr(C)
。问题是表示不是 Rust 中的特征,因此我没有看到静态强制执行此操作的直接方法,像 struct Foo<T: ReprC>
这样的东西会很好,但据我所知不存在。可以用宏吗?
也许您可以制作一个特征,ReprC
,并将其用作您的方法的特征绑定。这不是真正重要的强制执行,但它可能比文档更好。