我嘗試撰寫一個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]) {
//^^^
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408800.html
標籤:
上一篇:如何將元組提取到函式引數中
