我想在编译时创建一个包含字母表的 ASCII 字符集合。
像这样的东西很好用:
consteval std::string_view get_alphabet()
{
std::string_view sv = "ABCDE ... XYZ";
return sv;
}
但是,为了避免拼写错误,我想使用
iota
来创建集合。std::string_view
中?
这是想法,但它只在运行时有效。
std::string_view get_alphabet()
{
static std::string s(26, 0);
std::iota(s.begin(), s.end(), 'A');
return s;
}
您可以定义一个包含字母表的 const 数组,如下所示:
#include <array>
constexpr auto get_alphabet()
{
return [&]<std::size_t...Is>(std::index_sequence<Is...>){
return std::array<char,26>{{ 'A'+ Is... }};
}(std::make_index_sequence<26>());
}
static_assert (get_alphabet() == std::array<char,26> { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' });
int main()
{
}
请注意,我在编写 static_assert 时没有输入错误;)