D 堆分配任何东西的语法?
是否有语法、模板或函数允许我将任何值转换为指向该值的指针?也就是说,将它复制到gc堆并返回指向它的指针?“new”不适用于所有类型,std.Experiative.allocator不适用于ctfe,而且两者似乎都无法向委托创建指针。您可以将有问题的数据放入D 堆分配任何东西的语法?,d,D,是否有语法、模板或函数允许我将任何值转换为指向该值的指针?也就是说,将它复制到gc堆并返回指向它的指针?“new”不适用于所有类型,std.Experiative.allocator不适用于ctfe,而且两者似乎都无法向委托创建指针。您可以将有问题的数据放入结构中,然后在该结构上使用new关键字 T* copy_to_heap(T)(T value) { // create the struct with a value inside struct S {
结构中,然后在该结构上使用new
关键字
T* copy_to_heap(T)(T value) {
// create the struct with a value inside
struct S {
T value;
}
// new it and copy the value over to the new heap memory
S* s = new S;
s.value = value;
// return the pointer to the value
return &(s.value);
}
void main() {
// example use with a delegate:
auto dg = copy_to_heap(() { import std.stdio; writeln("test"); });
(*dg)();
}
这假设您已经有了一个要复制的值,但这可能更容易,而且您无论如何都会这样做。但是,如果您愿意,您也可以调整代码以删除该要求(例如,可能只传递typeof.init)。什么类型的new
不适用于代理?例如,这是一个奇怪的要求,但有一个简单的解决方案:将其包装在结构中。我会把它写下来,作为一个回答,就像一个符咒!