具有不可复制类型的数组

时间:2016-02-01 23:35:56

标签: d

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

Array!(Unique!Foo) p

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

1 个答案:

答案 0 :(得分:5)

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

因此,您正在谈论做一些原本没有计划的事情,而且可能会或可能不会使其适用于当前的设计。无论如何,如果它不起作用,那么应该为它打开一个错误报告:https://issues.dlang.org

现在,已经有一段时间了,当分配器被添加到标准库时,std.container会得到一些调整,而对于2.070,我们现在有了std.experimental.allocator和Andrei Alexandrescu目前正在对我们的容器解决方案进行重大的重新设计,以便我们最终得到一个新的包/模块来处理容器(可能是std.collection,因为显然已经采用了std.container)。因此,无论是否使用std.container进行修复,都应该使用新的容器类型来解决这个问题。