如何在Rust中指定枚举的表示类型以便与C++进行交互?

6
有没有一种方法可以在Rust中使用显式表示类型创建类似于C ++风格的枚举?例如:
enum class Number: int16_t {
    Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine
};

如果不行,我还有其他方法可以像那样组织变量吗?我正在与外部库进行交互,因此指定类型非常重要。我知道我可以只是这样做:
type Number = int16_t;
let One: Number = 1;
let Two: Number = 2;
let Three: Number = 3;

我认为这样会引入很多冗余;


请注意,这个问题不是Is it possible to wrap C enums in Rust? 的重复,因为它是关于包装C++而不是包装C。


1
可能是Is it possible to wrap C enums in Rust?的重复问题。 - filmor
1
@fimor 那个问题是关于C风格的枚举,这与C++的不同。 - Jeroen
啊,你更新了问题,太好了 :) - filmor
@JeroenBollen,注意到您从标题中删除了“在与C ++接口时”的内容,这个问题是否涉及与C ++的接口?否则,它看起来像是“是否可以在Rust中包装C枚举?”的重复。 - ideasman42
这个问题的目的对我来说还有点含糊。Rust没有C++ FFI,所以假设这将被转换为C int16_t并通过C的FFI进行处理? https://github.com/rust-lang/rfcs/issues/602 - ideasman42
显示剩余2条评论
1个回答

16

您可以为枚举指定一个表示。

#[repr(i16)]
enum Foo {
    One = 1,
    Two = 2,
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接