如何静态地强制泛型类型具有特定的表示形式?

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,并将其用作您的方法的特征绑定。这不是真正重要的强制执行,但它可能比文档更好。