Rust 使用声明宏替类(struct)添加反射信息
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Rust 使用声明宏替类(struct)添加反射信息,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1188字,纯文字阅读大概需要2分钟。
内容图文
![Rust 使用声明宏替类(struct)添加反射信息](/upload/InfoBanner/zyjiaocheng/1016/373366e7d81f4c3da3c234a7b52d64f8.jpg)
使用声明宏替类(struct)添加反射信息
按网上的说法,Rust语言由于没有runtime,因此不支持运行时反射。
我捣鼓了半天发现可以使用声明宏替类添加反射信息,
可以实现类似反射的效果。
贴在这儿供大家参考。
(代码只是示意,不完整,请理解原理后自行完善)
#[macro_export]
macro_rules! set_u32_value {
($name:expr, $condition:expr, $field:expr, $value:expr, u32) => {
if $name == $condition {
$field = $value;
}
};
($($else:tt)*) => {};
}
#[macro_export]
macro_rules! set_bool_value {
($name:expr, $condition:expr, $field:expr, $value:expr, bool) => {
if $name == $condition {
$field = $value;
}
};
($($else:tt)*) => {};
}
#[macro_export]
macro_rules! reflect_info {
(
$vis1:vis struct $name:ident {
$(
$vis2:vis $item:ident: $t:tt$(,)*
),+
}
) => {
$vis1 struct $name {
$(
$vis2 $item: $t,
)+
}
impl $name {
pub fn set_u32_value(&mut self, name: &str, value: u32){
$(
set_u32_value!(name, stringify!($item), self.$item, value, $t);
)*
}
pub fn set_bool_value(&mut self, name: &str, value: bool){
$(
set_bool_value!(name, stringify!($item), self.$item, value, $t);
)*
}
}
};
}
#[macro_use]
reflect_info! {
struct Test{
uuu:u32,
bbb:bool
}
}
其他参考:
https://github.com/zkonge/husk/blob/2a75692de441a662af3c1d3dc7dfa2b0c93d73eb/src/tls_item.rs#L52
内容总结
以上是互联网集市为您收集整理的Rust 使用声明宏替类(struct)添加反射信息全部内容,希望文章能够帮你解决Rust 使用声明宏替类(struct)添加反射信息所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。