D 堆分配任何东西的语法?

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 {

是否有语法、模板或函数允许我将任何值转换为指向该值的指针?也就是说,将它复制到gc堆并返回指向它的指针?“new”不适用于所有类型,std.Experiative.allocator不适用于ctfe,而且两者似乎都无法向委托创建指针。

您可以将有问题的数据放入
结构中,然后在该结构上使用
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
不适用于代理?例如,这是一个奇怪的要求,但有一个简单的解决方案:将其包装在
结构中。我会把它写下来,作为一个回答,就像一个符咒!