Macros Rust中的函数或函数的等价物? 在C++和C++中,通过使用C9+C++11和 >函数> 代码>,可以获得当前执行函数的名称:
在锈病中是否有类似的现象 C中的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关于这一点有一个明确的定义,但从未达成一致或实施 其缺席的理由: “总的来说,我不认为我们中的任何人给予了过多的支持 从长远角度考虑这些“调试相关”宏 稳定性。他们中的大多数人似乎都是无害的,但他们承诺 为所有生锈程序提供所有这些是一个强大的解决方案 我
\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!();代码>