๊ณต์œ  Enum

#[cxx::bridge]
mod ffi {
    enum Suit {
        Clubs,
        Diamonds,
        Hearts,
        Spades,
    }
}

์ƒ์„ฑ๋œ ๋Ÿฌ์ŠคํŠธ:

#![allow(unused)]
fn main() {
#[derive(Copy, Clone, PartialEq, Eq)]
#[repr(transparent)]
pub struct Suit {
    pub repr: u8,
}

#[allow(non_upper_case_globals)]
impl Suit {
    pub const Clubs: Self = Suit { repr: 0 };
    pub const Diamonds: Self = Suit { repr: 1 };
    pub const Hearts: Self = Suit { repr: 2 };
    pub const Spades: Self = Suit { repr: 3 };
}
}

Generated C++:

enum class Suit : uint8_t {
  Clubs = 0,
  Diamonds = 1,
  Hearts = 2,
  Spades = 3,
};
  • Rust ์ธก์—์„œ, ๊ณต์œ ๋œ enum์— ๊ด€ํ•ด ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋Š” ์‹ค์ œ๋กœ ์ˆซ์ž ๊ฐ’์„ ๋ž˜ํ•‘ํ•˜๋Š” ๊ตฌ์กฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด๋Š” enum ํด๋ž˜์Šค๊ฐ€ ๋‚˜์—ด๋œ ๋ชจ๋“  ๋ณ€ํ˜•๊ณผ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ณด์œ ํ•˜๋Š” ๊ฒƒ์ด C++์—์„œ UB๊ฐ€ ์•„๋‹ˆ๊ณ  Rust ํ‘œํ˜„๋„ ๋™์ผํ•œ ๋™์ž‘์„ ๊ฐ€์ ธ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.