Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 如何在宏中设置编译时条件_Macros_Rust - Fatal编程技术网

Macros 如何在宏中设置编译时条件

Macros 如何在宏中设置编译时条件,macros,rust,Macros,Rust,我想在宏生成函数外的代码时,在宏中设置编译时条件。我需要这样的东西: 或者类似的事情: 当前的Rust宏状态是否可能?您所要求的是不可能的。谢天谢地,你所要求的和你的例子表明你想要的是两件不同的事情: macro_rules! cond { ("i32") => { struct A { x: i32, } }; ($el:expr) => { struct B {

我想在宏生成函数外的代码时,在宏中设置编译时条件。我需要这样的东西:

或者类似的事情:


当前的Rust宏状态是否可能?

您所要求的是不可能的。谢天谢地,你所要求的和你的例子表明你想要的是两件不同的事情:

macro_rules! cond {
    ("i32") => {
        struct A {
            x: i32,
        }
    };
    ($el:expr) => {
        struct B {
            x: f64
        }
    };
}

cond!("i32");
cond!("f64");

fn main() {}

但是,从字面上理解您的问题:不,没有办法对宏中的条件进行任何类型的复杂测试,宏也不能设置或测试传递给它们的内容之外的任何类型的状态。您可以对宏的直接输入进行文字匹配,或者您可以将某些输入解析为有限数量的语法构造之一(然后您就无法进行匹配),仅此而已。

如果宏不足,则始终会有
build.rs
和过程宏。谢谢您的回答!你让我有了一些想法。
macro_rules! cond {
    ( $cond_el:expr ) => {
         match $cond_el {
            "i32" => {
                struct A {
                   x: i32
                }
            }
            _ => {
                struct A {
                    x: f64
                }
            }
        }
    }
}

cond!("i32");
cond!("f64");

fn main() {}
macro_rules! cond {
    ("i32") => {
        struct A {
            x: i32,
        }
    };
    ($el:expr) => {
        struct B {
            x: f64
        }
    };
}

cond!("i32");
cond!("f64");

fn main() {}