拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 推汇出可变自变量模板函式中的阵列大小

推汇出可变自变量模板函式中的阵列大小

白鹭 - 2022-01-26 1970 0 0

我尝试撰写一个constexpr接受可变数量的 C 字符串函式。我想推汇出传递阵列的所有大小(这里:L0LL)。看起来像我在那里犯的一个愚蠢的错误,但试图这样做,我得到一个错误:

error: parameter packs not expanded with '...':
  204 | constexpr auto generate(const char (&s0)[L0], const char (&ss)[LL] ...) {
template<size_t L0, size_t... LL>
constexpr auto generate(const char (&s0)[L0], const char (&ss)[LL] ...) {
    constexpr size_t ll = (LL   ...);
    std::integral_constant<size_t, L0>::_;
    std::integral_constant<size_t, ll>::_;
        
    std::array<char, 1   L0   ll> r;
    return r;        
}

constexpr auto STR_X = generate("abc", "def");

这是使用gcc版本 12.0 和-std=c 20.

uj5u.com热心网友回复:

问题应该是ss(也就是可变自变量)的扩展

// ellipsis here ...........................................VVV
constexpr auto generate(const char (&s0)[L0], const char (& ... ss)[LL]) {

uj5u.com热心网友回复:

您可以通过避免过度指定自变量型别来使函式更简单。此外,由于第一个自变量的处理方式与其他自变量没有区别,因此似乎没有必要:

constexpr auto
generate(auto&&... ss) {
    constexpr size_t ll = (sizeof(ss)   ...);
    return std::array<char, 1   ll>{};
}

uj5u.com热心网友回复:

问题是您在错误的地方使用了省略号 ...修正如下图:

template<size_t L0, size_t... LL>
constexpr auto generate(const char (&s0)[L0], const char (&...ss)[LL]) {
                                                         //^^^
    
         
}
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *