我写了一个非常简单的宏,它应该实现一个C结构的包装器:
macro_rules! features{
($struct_name: ident, $from_type: ident, $($name: ident => $vk: ident,)+) => {
#[derive(Debug, Copy, Clone)]
pub struct $struct_name{
$(
pub $name: bool,
)+
}
impl $struct_name{
pub fn empty() -> $struct_name{
$struct_name{
$(
$name: false,
)+
}
}
pub fn subset(&self, other: &Self) -> bool{
$((!self.$name | other.$name))&&+
}
}
//TODO: Probably just impl From with a cast?
impl From<vk::$from_type> for $struct_name{
fn from(features: vk::$from_type) -> $struct_name {
$struct_name{
$(
$name: features.$vk != 0,
)+
}
}
}
impl From<$struct_name> for vk::$from_type {
fn from(features: $struct_name) -> vk::$from_type {
vk::$from_type{
$(
$vk: features.$name as u32,
)+
}
}
}
impl fmt::Display for $struct_name {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result{
$(
if self.$name {
try!(writeln!(f, "{},", stringify!($name)));
}
)+
writeln!(f, "")
}
}
}
}
我这样使用它:
features!{
Features,
PhysicalDeviceFeatures,
robust_buffer_access => robustBufferAccess,
full_draw_index_uint32 => fullDrawIndexUint32,
image_cube_array => imageCubeArray,
....
}
这是可行的,但是我不得不做一个非常难看的hack$from_type:ident
,然后在宏中使用vk::$from_type
。我真正想做的是:
features!{
Features,
vk::PhysicalDeviceFeatures,
robust_buffer_access => robustBufferAccess,
full_draw_index_uint32 => fullDrawIndexUint32,
image_cube_array => imageCubeArray,
....
}
然后,我可以完全提供类型,而不是依赖于ident在硬编码模块vk::
中。
问题是我不能用path
或ty
$from_type{..}
错误:
error: expected expression, found `PhysicalDeviceFeatures`
-->
|
38 | $from_type{
| ^^^^^^^^^^
和
error: expected one of `.`, `;`, `?`, `}`, or an operator, found `{`
--> /home/maik/projects/ashlib/ash/src/feature.rs:38:27
|
38 | $from_type{
|
要使此功能正常工作,$from_type
需要什么符号?
我创建了一个简短的例子来更清楚地表达我的问题(游乐场):
mod foo {
struct Foo{
i: i32
}
}
macro_rules! c_enum {
(
$name:ty
) => {
fn new() -> $name {
$name{
i: 42
}
}
}
}
c_enum!{
foo::Foo
}
fn main() {
}
我不知道为什么path
或ty
失败,我会提交一个bug以防生锈。在过去,我通过使用tt
说明符来解决这个问题,它几乎匹配所有内容。
我发现的大部分stackoverflow结果都是用于序列化整个对象或反序列化的。我的一些想法… 是否可以从三个值字段中删除@SerializedName并只序列化不为null的值? 我是否可以在java中构建某种可选的数据类型对象,该对象基于具有值的数据类型进行设置? 这个对象是一个更大的对象的一部分,而subitems对象有一个相当大的深度,它只是一个注释。我希望这是一个重复的问题,我只是找不到
我试图设置请求的内容类型标题,但是okhttp会自动将内容类型添加到标题列表的末尾,并将其设置为application/json;charset=UTF-8,尽管我只是将其设置为application/json。 还有其他人经历过吗?如果是的话,我可以提出请求。 我发现okhttp没有通过fiddler正确发送此标头。
问题内容: 我目前正在通过处理rosalind问题(基本上是一堆与生物信息学相关的代码katas)来学习Go 。 我目前用一种类型代表一条DNA链: 我最初的原因是封装字节片,所以我知道它只包含代表核苷酸的字节:。我意识到这显然没有被保证,因为我可以这样做: 并且不再保证我的dna链包含一个字节数组,其中只有这四个字节中的元素。 由于我的结构仅包含一个字节数组,因此这样做是更好/更理想的方法: 还
当响应客户端的GET请求返回字节块时,要使用什么HTTP“内容类型”? 在本例中,信息负载是使用Python的Pickle库序列化的对象。
我有一个组件,根据其大小接收道具。道具可以是字符串或数字,例如:或。 我能让知道这可以是PropTypes验证中的一个或另一个吗? 如果未指定类型,则会收到警告: prop type无效;它必须是一个函数,通常来自React。道具类型。
内建类型 JavaScript 定义了七种内建类型: null undefined boolean number string object symbol — 在 ES6 中被加入的! 注意: 除了 object 所有这些类型都被称为“基本类型(primitives)”。 typeof 操作符可以检测给定值的类型,而且总是返回七种字符串值中的一种 — 令人吃惊的是,对于我们刚刚列出的七中内建类型,