具有不可复制类型的数组

Mai*_*ein 3 d

我怎么std::vector<std::unique<foo>> p在D 表达?

Array!(Unique!Foo) p
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*vis 5

据我所知,std.container中的任何内容当前都不支持非可复制类型.D默认初始化所有内容的事实,除非你花费额外的努力告诉它不要使得通常更难以支持无法分配或复制的类型.这绝对是你必须计划的事情,否则它将无法运作.当std.container最初设计时,不考虑AFAIK,不可复制的类型.事实上,我很确定当时,不可能@disable为类型默认初始化,而@disablepostblit构造函数可能无法实现.但我不记得究竟何时@disable引入或最初的工作原理.

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

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