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

时间:2018-06-07 02:52:11

标签: generics rust memory-alignment

我想要用于FFI的通用struct Foo<T>。例如,以下内容可用于内存映射实现。

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>会很好,但据我所知,它不存在。可以使用宏吗?

1 个答案:

答案 0 :(得分:1)

也许你可以制作一个特征ReprC,并将其用作你方法的特征。它没有强制执行真正重要的事情,但它可能比文档更好。