Манипуляция строкой во время компиляции с помощью шаблонов Variadic
Привет всем, я сейчас пытаюсь написать строковое шифрование во время компиляции (используя слова 'string' и 'encryption' довольно свободно) lib.
То, что я до сих пор, выглядит следующим образом:
// Cacluate narrow string length at compile-time
template <char... ArgsT>
struct CountArgs
{
template <char... ArgsInnerT> struct Counter;
template <char Cur, char... Tail>
struct Counter<Cur, Tail...>
{
static unsigned long const Value = Counter<Tail...>::Value + 1;
};
template <char Cur>
struct Counter<Cur>
{
static unsigned long const Value = 1;
};
static unsigned long const Value = Counter<ArgsT...>::Value;
};
// 'Encrypt' narrow string at compile-time
template <char... Chars>
struct EncryptCharsA
{
static const char Value[CountArgs<Chars...>::Value + 1];
};
template<char... Chars>
char const EncryptCharsA<Chars...>::Value[CountArgs<Chars...>::Value + 1] =
{
Chars...
};
Однако я не могу понять, как выполнять операции над символами, когда я расширяю их в статический массив. Я просто хотел бы выполнить простую операцию для каждого символа (например, '(((c ^ 0x12) ^ 0x55) + 1)', где c - символ).
Пуш в правильном направлении был бы очень признателен.
Спасибо всем.