Синтаксис для кучи выделить что-нибудь? - PullRequest
1 голос
/ 06 ноября 2019

Существует ли синтаксис, шаблон или функция, которая позволяет мне по существу превращать любое значение в указатель на это значение? Т.е. скопировать его в кучу gc и вернуть указатель на него? «new» не работает для всех типов, std.experimental.allocator не работает в ctfe, и у обоих, похоже, есть проблемы с указателями на делегатов.

1 Ответ

3 голосов
/ 06 ноября 2019

Вы можете поместить эти данные в 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, например).

...