Как преобразовать строковый литерал .rdata в строковый литерал в стеке во время компиляции ⇐ C++
Как преобразовать строковый литерал .rdata в строковый литерал в стеке во время компиляции
Я пишу позиционно-независимый код, поэтому мне нужно, чтобы все строки помещались в стек, а не в раздел PE .rdata. Этого можно добиться, используя массив символов вместо строкового литерала:
char str[] = {'s', 't', 'r', 'i', 'n', 'g', '\0' }; Но это очень неудобно.
Можно ли использовать какие-либо приемы метапрограммирования, позволяющие использовать строковые литералы путем преобразования их в массив в стеке во время компиляции?
Возможно, этого можно достичь, используя std::initializer_list в качестве возвращаемого типа или передавая строку в качестве нетипового параметра шаблона, пакетов параметров. Основная проблема, с которой я столкнулся при использовании разных подходов, — это невозможность вернуть массив как тип возвращаемого значения, не помещая его в .rdata или в кучу.
Было бы здорово реализовать такой синтаксис, используя определяемые пользователем строковые литералы.
auto str = "string"_onstack; Также разрешены __forceinline или любые расширения компилятора msvc/clang.
Я пишу позиционно-независимый код, поэтому мне нужно, чтобы все строки помещались в стек, а не в раздел PE .rdata. Этого можно добиться, используя массив символов вместо строкового литерала:
char str[] = {'s', 't', 'r', 'i', 'n', 'g', '\0' }; Но это очень неудобно.
Можно ли использовать какие-либо приемы метапрограммирования, позволяющие использовать строковые литералы путем преобразования их в массив в стеке во время компиляции?
Возможно, этого можно достичь, используя std::initializer_list в качестве возвращаемого типа или передавая строку в качестве нетипового параметра шаблона, пакетов параметров. Основная проблема, с которой я столкнулся при использовании разных подходов, — это невозможность вернуть массив как тип возвращаемого значения, не помещая его в .rdata или в кучу.
Было бы здорово реализовать такой синтаксис, используя определяемые пользователем строковые литералы.
auto str = "string"_onstack; Также разрешены __forceinline или любые расширения компилятора msvc/clang.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Могу ли я преобразовать строковое значение C# в экранированный строковый литерал?
Anonymous » » в форуме C# - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Директивы препроцессора появляются в HTML, встроенном в необработанный строковый литерал.
Anonymous » » в форуме C++ - 0 Ответы
- 41 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Разобрать строковый литерал периода/длительности в экземпляр Period/Duration в Java
Anonymous » » в форуме JAVA - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-