Macros Rust中的函数或函数的等价物? 在C++和C++中,通过使用C9+C++11和 >函数> 代码>,可以获得当前执行函数的名称:

Macros Rust中的函数或函数的等价物? 在C++和C++中,通过使用C9+C++11和 >函数> 代码>,可以获得当前执行函数的名称:,macros,rust,Macros,Rust,在锈病中是否有类似的现象 C中的\uuuu func\uuuu示例: #包括“stdio.h” 你好{ printf(“来自%s\n的你好”,函数); } int main(){ 好笑的你好; } 输出来自fully的Hello\u Hello关于这一点有一个明确的定义,但从未达成一致或实施 其缺席的理由: “总的来说,我不认为我们中的任何人给予了过多的支持 从长远角度考虑这些“调试相关”宏 稳定性。他们中的大多数人似乎都是无害的,但他们承诺 为所有生锈程序提供所有这些是一个强大的解决方案 我

在锈病中是否有类似的现象

C中的
\uuuu func\uuuu
示例:

#包括“stdio.h”
你好{
printf(“来自%s\n的你好”,函数);
}
int main(){
好笑的你好;
}
输出来自fully的Hello\u Hello

关于这一点有一个明确的定义,但从未达成一致或实施

其缺席的理由:

“总的来说,我不认为我们中的任何人给予了过多的支持 从长远角度考虑这些“调试相关”宏 稳定性。他们中的大多数人似乎都是无害的,但他们承诺 为所有生锈程序提供所有这些是一个强大的解决方案 我们可以简单地考虑一下这些故事。 宏,并考虑添加此新宏。”

也许Rust将来会有类似的东西,
但是现在你需要依靠你自己的标签


旁注:
\uuu函数\uuuuu
是非标准的,C99/C++11中存在
\uuuu函数\uuuuu

您可以将其与
std::any::type\u name
一起破解

macro_rules! function {
    () => {{
        fn f() {}
        fn type_name_of<T>(_: T) -> &'static str {
            std::any::type_name::<T>()
        }
        let name = type_name_of(f);
        &name[..name.len() - 3]
    }}
}
macro\u规则!作用{
() => {{
fn f(){}
fn类型名称(:T)->&'static str{
std::any::type_name::()
}
设name=type_name_of(f);
&name[…name.len()-3]
}}
}
请注意,这提供了完整的路径名,因此
my::path::my_func
而不仅仅是
my_func

添加到,您可以通过添加以下内容获得函数名,而无需完整路径:

macro\u规则!作用{
() => {{
fn f(){}
fn类型名称(:T)->&'static str{
std::any::type_name::()
}
设name=type_name_of(f);
//找到并切割路径的其余部分
匹配名称[…name.len()-3].rfind(“:”){
Some(pos)=>&name[pos+1..name.len()-3],
None=>&name[…name.len()-3],
}
}};
}

例如,您将获得
my_func
而不是
my::path::my_func

请注意,此实现还有一个限制,即它当前无法用于构建静态值,例如:
静态名称:&'static str=function!();