Как преобразовать строковый литерал .rdata в строковый литерал в стеке во время компиляцииC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как преобразовать строковый литерал .rdata в строковый литерал в стеке во время компиляции

Сообщение Anonymous »


Я пишу позиционно-независимый код, поэтому мне нужно, чтобы все строки помещались в стек, а не в раздел PE .rdata. Этого можно добиться, используя массив символов вместо строкового литерала:

char str[] = {'s', 't', 'r', 'i', 'n', 'g', '\0' }; Но это очень неудобно.

Можно ли использовать какие-либо приемы метапрограммирования, позволяющие использовать строковые литералы путем преобразования их в массив в стеке во время компиляции?

Возможно, этого можно достичь, используя std::initializer_list в качестве возвращаемого типа или передавая строку в качестве нетипового параметра шаблона, пакетов параметров. Основная проблема, с которой я столкнулся при использовании разных подходов, — это невозможность вернуть массив как тип возвращаемого значения, не помещая его в .rdata или в кучу.

Было бы здорово реализовать такой синтаксис, используя определяемые пользователем строковые литералы.

auto str = "string"_onstack; Также разрешены __forceinline или любые расширения компилятора msvc/clang.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»