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