小编rie*_*eux的帖子

使用非复制类型初始化大型固定大小的数组

我正在尝试初始化一些可以为空的非可复制类型的固定大小的数组,就像Option<Box<Thing>>某种类型的那样Thing.我想把它们中的两个打包成一个没有任何额外间接的结构.我想写这样的东西:

let array: [Option<Box<Thing>>; SIZE] = [None; SIZE];
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为[e; n]语法要求e实现Copy.当然,我可以将它扩展为SIZE Nones,但是当SIZE它很大时,这可能是笨重的.我不相信这可以用没有非自然编码的宏来完成SIZE.有没有好办法呢?

是的,这很容易unsafe; 没有办法unsafe吗?

rust

17
推荐指数
4
解决办法
2684
查看次数

std::list 用它的分配器参数做什么?

std::list由分配器类型参数化,它可能会重新绑定该类型以分配列表节点而不是Ts。那么它对传递给构造函数的分配器类型的对象做了什么?

template <class T, class Alloc = std::allocator<T>>
class list
{
    class node { ... T element; ... };

    using real_alloc =
        typename std::allocator_traits<Alloc>::template rebind_alloc<node>;
    real_alloc m_allocator;

public:
    list(const Alloc&);
};
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我们需要初始化m_allocator一个节点分配器,但是构造函数被赋予了一个T分配器。我们是直接将T分配器扔在地板上,还是以某种方式使用它?

c++ stl

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

如何约束迭代器的元素类型?

我正在转换一些旧的 Rust 代码以在 1.0.0 上工作。我需要转换一个在字符上使用迭代器的函数,它曾经是这样写的:

 fn f<I: Iterator<char>>(char_iter: I)
Run Code Online (Sandbox Code Playgroud)

现在Iterator不带参数,对的约束I只能是I: Iterator. 那么元素类型是I::Item。有没有办法表达I::Item=的约束char?(或者我应该完全以另一种方式这样做吗?)

rust

4
推荐指数
1
解决办法
616
查看次数

标签 统计

rust ×2

c++ ×1

stl ×1