gpt4 book ai didi

c++ - 如何从折叠表达式中获取索引

转载 作者:行者123 更新时间:2023-12-01 23:26:45 25 4
gpt4 key购买 nike

我正在制作一个简单的 constexpr 字符串编码器,请参见下文。

template<char...Chars>
struct encoder
{
constexpr static char encode(char c)
{
return c ^ size;
}
constexpr static size_t size = sizeof...(Chars);
constexpr static const char value[size + 1] = {encode(Chars)...,0};
};

template<typename T,T...Chars>
constexpr auto operator""_encode()
{
return encoder<Chars...>::value;
}

用途:

“aab”_编码

“123”_编码

我想从编码函数中获取字符索引,就像这样

    constexpr static char encode(char c,uint32_t index)
{
return c ^ (size + index);
}

或者像这样

template<uint32_t index>
constexpr static char encode(char c)
{
return c ^ (size + index);
}

但是我不知道怎么办。有人告诉我该怎么做吗?

最佳答案

您可以在 C++17 中的单个 constexpr 函数中编写整个内容:

template<typename T, T...Chars>
constexpr auto operator""_encode()
{
constexpr std::size_t size = sizeof...(Chars);
std::array<char, size+1> ret = {}; // Maybe T instead of char?
int i = 0;
((ret[i] = Chars ^ (size + i), i++), ...);
ret[size] = 0;
return ret;
}

(为了每个人的理智,我让它返回一个 std::array 而不是内置数组。)

这是一个 godbolt 链接,包括您的一个测试输入(如果您包含所需的输出,它会有所帮助,没有人喜欢仔细研究 ASCII 表并手动异或内容,即使我在这里这样做):

https://godbolt.org/z/P8ABHM

此外,请不要使用它来加密任何内容。

关于c++ - 如何从折叠表达式中获取索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59052742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com