堆分配什么的语法?
Syntax to heap allocate anything?
是否有语法、模板或函数可以让我从本质上将任何值转换为指向该值的指针? IE。将它复制到 gc 堆和 return 指向它的指针? "new" 不适用于所有类型,std.experimental.allocator 不适用于 ctfe,并且两者似乎都无法为委托提供指针。
您可以将相关数据放在 struct
中,然后在该结构上使用 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)。
是否有语法、模板或函数可以让我从本质上将任何值转换为指向该值的指针? IE。将它复制到 gc 堆和 return 指向它的指针? "new" 不适用于所有类型,std.experimental.allocator 不适用于 ctfe,并且两者似乎都无法为委托提供指针。
您可以将相关数据放在 struct
中,然后在该结构上使用 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)。