具有不可复制类型的数组
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.
修复了这个问题,都应该用新的容器类型提出并解决。
我如何用 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.
修复了这个问题,都应该用新的容器类型提出并解决。