3个版本
0.1.2 | 2020年4月25日 |
---|---|
0.1.1 | 2020年4月25日 |
0.1.0 | 2020年4月25日 |
#1989 in 过程宏
9KB
count_tys!() 类函数宏
返回给定 :ty
(类型)在逗号分隔的 TokenStream
中的计数,作为类型为 usize
的常量表达式
参数
input
- 一个包含逗号分隔的:ty
(类型)必须计数的TokenStream
示例
基本用法
// count_tys!($($ty:ty),*)
更完整的示例
Cargo.toml
/*
[dependencies]
proc-macro-hack = "0.5"
count-tys = "0.1"
*/
main.rs
extern crate proc_macro_hack;
use proc_macro_hack::proc_macro_hack;
#[proc_macro_hack]
use count_tts::count_tys;
// It not necessarily must be a struct, it could be a generic
// Read more about macro_rules! here:
// <https://doc.rust-lang.net.cn/rust-by-example/macros.html>
macro_rules! declare_variadic_struct {
($struct_name:ident, <$($ty:ty),*>) => {
struct $struct_name {
// fields
}
impl $struct_name {
pub const fn count() -> usize {
// count_tys!() can be used in an expression and even
// const expression context
// unlike macros without proc_macro_hack
// note: see issue #54727
// <https://github.com/rust-lang/rust/issues/54727>
// for more information.
count_tys!($($ty:ty),*)
}
}
};
}
// declare_variadic_struct!(VariadicStruct, <usize, usize, usize>);
// expands into the following:
//
// struct VariadicStruct {
// // fields
// }
//
// impl VariadicStuct {
// pub const fn count() -> usize {
// 3usize
// }
// }
declare_variadic_struct!(VariadicStruct, <usize, usize, usize>);
assert_eq!(VariadicStruct::count(), 3);
依赖项
~1.5MB
~35K SLoC