小编Mau*_*ser的帖子

Rust位域和枚举C++风格

我是一个来自C/C++的Rust初学者.首先,我尝试使用user32.MessageBox为Microsoft Windows创建一个简单的"Hello-World"程序,我偶然发现了与bitfields相关的问题.免责声明:所有代码段都是在SO编辑器中编写的,可能包含错误.

消息框中的"Hello-World"

调用该函数的UTF-16LE版本所需的合并C声明是:

enum MessageBoxResult {
    IDFAILED,
    IDOK,
    IDCANCEL,
    IDABORT,
    IDRETRY,
    IDIGNORE,
    IDYES,
    IDNO,
    IDTRYAGAIN = 10,
    IDCONTINUE
};

enum MessageBoxType {
    // Normal enumeration values.
    MB_OK,
    MB_OKCANCEL,
    MB_ABORTRETRYIGNORE,
    MB_YESNOCANCEL,
    MB_YESNO,
    MB_RETRYCANCEL,
    MB_CANCELTRYCONTINUE,

    MB_ICONERROR            = 0x10UL,
    MB_ICONQUESTION         = 0x20UL,
    MB_ICONEXCLAMATION      = 0x30UL,
    MB_ICONINFORMATION      = 0x40UL,

    MB_DEFBUTTON1           = 0x000UL,
    MB_DEFBUTTON2           = 0x100UL,
    MB_DEFBUTTON3           = 0x200UL,
    MB_DEFBUTTON4           = 0x300UL,

    MB_APPLMODAL            = 0x0000UL,
    MB_SYSTEMMODAL          = 0x1000UL,
    MB_TASKMODAL            = 0x2000UL,

    // Flag values.
    MB_HELP                 = 1UL << 14,

    MB_SETFOREGROUND        = …
Run Code Online (Sandbox Code Playgroud)

c++ winapi bitflags rust bit-fields

5
推荐指数
1
解决办法
406
查看次数

我可以创建自己的条件编译属性吗?

在我的 crate 中有几种方法可以做一些事情,有些可以快速执行,有些二进制大小很小,有些还有其他优点,所以我为所有这些都提供了用户界面。未使用的函数将被编译器优化掉。我的 crate 中的内部函数也必须使用这些接口,我希望它们在编译时尊重用户的选择。

有条件编译属性,如target_os,它存储一个值,如linuxwindows。例如prefer_method,我如何创建这样的属性,以便我和用户可以像在以下代码片段中一样使用它?

我的箱子:

#[cfg(not(any(
    not(prefer_method),
    prefer_method = "fast",
    prefer_method = "small"
)))]
compile_error("invalid `prefer_method` value");

pub fn bla() {
    #[cfg(prefer_method = "fast")]
    foo_fast();

    #[cfg(prefer_method = "small")]
    foo_small();

    #[cfg(not(prefer_method))]
    foo_default();
}

pub fn foo_fast() {
    // Fast execution.
}

pub fn foo_small() {
    // Small binary file.
}

pub fn foo_default() {
    // Medium size, medium fast.
}
Run Code Online (Sandbox Code Playgroud)

用户箱:

#[prefer_method = "small"]
extern crate my_crate;

fn f() {
    // …
Run Code Online (Sandbox Code Playgroud)

conditional-compilation rust

3
推荐指数
1
解决办法
476
查看次数