Нечто подобное может сделать это, хотя последовательность 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");
Но это ограничивает размер строки.
Есть ли способ добиться того, чего я хочу?