Нечто подобное может сделать это, хотя последовательность Boost.PP не делает ее более красивой.

у зашифровать / кодировать строку во время компиляции, чтобы исходная строка не появлялась в скомпилированном исполняемом файле.

Я видел несколько примеров, но они не могут принимать строковый литерал в качестве аргумента. Смотрите следующий пример:

template<char c> struct add_three {
    enum { value = c+3 };
};

template <char... Chars> struct EncryptCharsA {
    static const char value[sizeof...(Chars) + 1];
};

template<char... Chars>
char const EncryptCharsA<Chars...>::value[sizeof...(Chars) + 1] = {
    add_three<Chars>::value...
};

int main() {   
    std::cout << EncryptCharsA<'A','B','C'>::value << std::endl;
    // prints "DEF"
}

Я не хочу предоставлять каждый символ отдельно, как это делает. Моя цель - передать строковый литерал следующим образом:

EncryptString<"String to encrypt">::value

Есть также несколько примеров, подобных этому:

#define CRYPT8(str) { CRYPT8_(str "\0\0\0\0\0\0\0\0") }
#define CRYPT8_(str) (str)[0] + 1, (str)[1] + 2, (str)[2] + 3, (str)[3] + 4, (str)[4] + 5, (str)[5] + 6, (str)[6] + 7, (str)[7] + 8, '\0'

// calling it
const char str[] = CRYPT8("ntdll");

Но это ограничивает размер строки.

Есть ли способ добиться того, чего я хочу?

Ответы на вопрос(4)

Ваш ответ на вопрос