小编eig*_*eif的帖子

使用逗号运算符折叠参数包的表达式:如何在展开包时添加附加参数?

我想设计一个编译时字符串类CTString,例如可以从字符串文字的参数包构造。这可以使用逗号折叠表达式(对于这个玩具示例,我试图避免使用任何系统标头以使其独立):

template<unsigned N>
struct CTString
{
    char m_chars[N + 1U];

    template<unsigned... Ns>
    constexpr CTString(const char (&...s)[Ns])
    {
        auto* p{ m_chars };
        ((p = CopyN_(s, Ns - 1U, p)), ...);
        *p = '\0';
    }

    // copy size characters and return one past last copy:
    constexpr char* CopyN_(const char* pFrom, unsigned size, char* pTo)
    {
        for (auto i{ 0U }; i < size; ++i)
            *(pTo++) = *(pFrom++);
        return pTo;
    }
};

template<unsigned... Ns>
constexpr auto concat(const char(&...s)[Ns])
{
    return CTString<(0U …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates fold-expression c++20 compile-time-type-checking

7
推荐指数
1
解决办法
335
查看次数