Как преобразовать строковый литерал .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.

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