在编译时创建字母字符串

问题描述 投票:0回答:1

我想在编译时创建一个包含字母表的 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;
}
c++
1个回答
0
投票

您可以定义一个包含字母表的 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 时没有输入错误;)

© www.soinside.com 2019 - 2024. All rights reserved.