#const #attributes #macro #static #compiler-version #proc-macro #no-alloc

无 std const_fn

一个轻量级的属性,用于轻松生成具有条件编译的 const 函数

22 个版本

0.4.10 2024 年 4 月 21 日
0.4.9 2022 年 1 月 3 日
0.4.8 2021 年 5 月 19 日
0.4.6 2021 年 3 月 27 日
0.1.2 2018 年 12 月 27 日

#795 in Rust 模式

Download history 117472/week @ 2024-05-02 118048/week @ 2024-05-09 140778/week @ 2024-05-16 132279/week @ 2024-05-23 118897/week @ 2024-05-30 118227/week @ 2024-06-06 115409/week @ 2024-06-13 117052/week @ 2024-06-20 114119/week @ 2024-06-27 107067/week @ 2024-07-04 119397/week @ 2024-07-11 124674/week @ 2024-07-18 127386/week @ 2024-07-25 124168/week @ 2024-08-01 131302/week @ 2024-08-08 116728/week @ 2024-08-15

每月 522,885 次下载
用于 1,082 个 crate (直接使用 9 个)

Apache-2.0 OR MIT

29KB
486

#[const_fn]

crates.io docs.rs license msrv github actions

一个轻量级的属性,用于轻松生成具有条件编译的 const 函数。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
const_fn = "0.4"

示例

use const_fn::const_fn;

// function is `const` on specified version and later compiler (including beta, nightly, and dev build)
#[const_fn("1.36")]
pub const fn version() {
    /* ... */
}

// function is `const` on nightly compiler (including dev build)
#[const_fn(nightly)]
pub const fn nightly() {
    /* ... */
}

// function is `const` if `cfg(...)` is true
#[const_fn(cfg(...))]
pub const fn cfg() {
    /* ... */
}

// function is `const` if `cfg(feature = "...")` is true
#[const_fn(feature = "...")]
pub const fn feature() {
    /* ... */
}

将此 crate 作为可选依赖项使用

如果没有传递任何参数,const_fn 将始终使函数为 const

因此,您可以通过结合 cfg_attr 来将 const_fn 作为可选依赖项使用。

// function is `const` if `cfg(feature = "...")` is true
#[cfg_attr(feature = "...", const_fn::const_fn)]
pub fn optional() {
    /* ... */
}

替代方案

此 crate 是 proc-macro,但非常轻量级,没有依赖关系。

您可以手动定义具有类似功能的声明式宏(参见 if_rust_version),或者 您可以定义两个具有不同 cfg 的相同函数。(注意:前者方法需要根据版本要求定义更多宏,后者方法需要手动维护更多函数)

许可证

根据您的选择,受 Apache 许可证,版本 2.0MIT 许可证 的许可。

除非您明确说明,否则根据 Apache-2.0 许可证定义的您有意提交以包含在作品中的任何贡献,都应按照上述方式双重许可,而无需任何附加条款或条件。

无运行时依赖项