【发布时间】:2021-11-06 04:55:06
【问题描述】:
我是一名正在向 Rust 过渡的 C++ 开发人员,我正在寻找类似于
bool isPrimitive = std::is_fundamental<varType>。我没有太多运气找到一个标准的方法来做到这一点。我想我可以手动滚动我自己的函数,该函数对所有 Rust 原始类型执行一堆 OR。但我希望那里已经有一些东西了。
示例
let is_primitive = someFunction<i32> //returns true
let is_primitive_1 = someFunction<Vec<u32>> //returns false
let is_primitive_2 = someFunction<someStruct> //returns false
let is_primitive_3 = someFunction<(bool, f32)> //returns false
【问题讨论】:
-
你为什么需要这个?
-
我认为(我最好的猜测)你在这里尝试的是有一个只接受“基础”的参数函数?这不是它在 Rust 中的工作方式。您必须描述该类型
T能够做什么,例如添加数字或在其上调用foo,通过使用约束,例如T: Foo其中Foo是一个特征。你可以看看doc.rust-lang.org/rust-by-example/generics.html -
“原始性”不是一个明确定义的质量。一个类型是“原始的”或“基本的”对你来说究竟意味着什么? Rust 本身没有这样的概念。
-
即便如此,您能否详细说明为什么您需要检查某事物是否符合原始性的特定定义?对于您在此处尝试解决的更高级别问题,很可能有一个优雅、惯用的解决方案。
-
例如,来自 C++ 的人可能认为他们需要检查原始性,以便他们可以安全地(即没有奇怪的别名效应和没有高内存成本)复制该类型的值。在 Rust 中,尽管您只需使用
Copy特征,所有原始类型都实现了它。
标签: rust primitive primitive-types