相关疑难解决方法(0)

是否可以使用泛型的类型参数来控制数组的大小?

以下内容仅用作示例,而不是有效的Rust代码.

struct Vec<T: Sized, Count> {
    a: [T; Count]
}
Run Code Online (Sandbox Code Playgroud)

在C++模板中可能有类似的东西,但我还没有在Rust中看到它.

rust

19
推荐指数
2
解决办法
3023
查看次数

Rust泛型中的常量值

Rust语言是否支持类似于c ++方式的通用代码中的常量值?似乎语言概述不会宣传它.使用C++中的常量参数化类型允许根据客户端的需要(类似stlsoft :: auto_buffer)创建具有不同大小的预分配缓冲区的对象.
如果没有,那么在Rust中实现类似设计的最佳实践是什么?

rust

7
推荐指数
1
解决办法
2049
查看次数

在结构的定义中使用静态整数

我正在尝试将一些C++代码迁移到Rust.我尝试了很多不同的方法,但没有一个编译.

我想要一个可以处理不同类型的通用模板,并且具有可调整的总大小和静态字段(const表达式)Capacity:

template<class KeyType, class ValueType, int PageSize>
struct BplusTreeLeaf {
    static const uint16_t Capacity = (PageSize-16)/(sizeof(KeyType)+sizeof(ValueType));
    KeyType keys[Capacity];
    ValueType values[Capacity];
};
Run Code Online (Sandbox Code Playgroud)

我想从外面访问容量:

for(int i = 0; i < BplusTreeLeaf<x, y, 4096>::Capacity; i ++) { ... }
Run Code Online (Sandbox Code Playgroud)

似乎在Rust中没有办法做这样的事情,或者至少在我对Rust的理解中:

  • static 在结构中是不允许的,文档告诉我使用宏
  • 只有类型可以在Rust中"模板化",而不是值或表达式.我甚至无法将总大小作为参数传递给结构定义

这是我得到的:

macro_rules! BplusTreeLeaf {
    ($KeyType:ident, $ValueType:ident, $PageSize:expr) => {
        static Capacity_: u16 = ($PageSize - 16) / (std::mem::size_of::<$KeyType>() + std::mem::size_of::<$ValueType>());
        struct BplusTreeLeaf_ {
            keys: [$KeyType, ..Capacity_],
            values: [$ValueType, ..Capacity_],
        }
    }
}

BplusTreeLeaf!(u64, u64, 4096)
Run Code Online (Sandbox Code Playgroud)

编译器产生"向量长度的预期常量expr",这是不正确的,因为我没有使用"mut" Capacity_ …

generics rust

5
推荐指数
1
解决办法
1300
查看次数

标签 统计

rust ×3

generics ×1