具有不可复制类型的数组

Array with non copyable types

我如何用 D 表达 std::vector<std::unique<foo>> p

Array!(Unique!Foo) p

问题是 Array 似乎需要 this(this),但在 Unique 中已被禁用。我不确定为什么 Array 首先需要一个 postblit 构造函数。

据我所知,目前 std.container 中没有任何内容支持不可复制的类型。事实上,D 默认会初始化所有内容,除非您付出额外的努力来告诉它不要这样做,这通常会使支持无法分配或复制的类型变得更加困难。这绝对是你必须计划的事情,否则它不会起作用。而且 AFAIK,最初设计 std.container 时没有考虑不可复制的类型。事实上,我很确定当时无法 @disable 类型的默认初始化,并且可能无法 @disable postblit 构造函数。但我不记得 @disable 是什么时候引入的,或者它最初的作用是什么。

所以,你说的是做一些最初没有计划的事情,它可能会也可能不会与当前的设计一起工作。无论如何,如果它不起作用,那么应该为它打开一个错误报告:https://issues.dlang.org

现在,std.container 计划在将分配器添加到标准库时进行一些调整已经有一段时间了,在 2.070 中,我们现在有了 std.experimental.allocator,Andrei Alexandrescu目前正在对我们的容器解决方案进行重大重新设计,这样我们最终将得到一个新的 package/module 来处理容器(可能 std.collection,因为 std.container 显然是已经采取)。因此,无论是否用 std.container.

修复了这个问题,都应该用新的容器类型提出并解决。