Создание строк в D без выделения памяти?

Есть ли безопасный способ создать строку в D, используя информацию, доступную только во время выполнения, без выделения памяти?

Простой пример того, что я мог бы сделать:

void renderText(string text) { ... }

void renderScore(int score)
{
    char[16] text;
    int n = sprintf(text.ptr, "Score: %d", score);
    renderText(text[0..n]); // ERROR
}

Используя это, вы получите сообщение об ошибке, потому что фрагмент текста не является неизменяемым и, следовательно, не является строка (то есть неизменяемый (char) [] )

Я могу придумать только три способа обойти это:

  1. Преобразование среза в строку . Это работает, но некрасиво.
  2. Выделите новую строку с помощью среза.Это работает, но я бы предпочел не выделять память.
  3. Измените renderText , чтобы он принимал const (char) [] . Здесь это работает, но (а) это некрасиво и (б) многие функции в Phobos требуют строки , поэтому, если я хочу использовать их таким же образом, это не сработает.

Все это не особенно приятно. Я что-то пропустил? Как все остальные могут решить эту проблему?

8
задан Peter Alexander 1 October 2011 в 10:39
поделиться