是的,我可以使用std::initializer_list
。是的,更容易,我可以做聚合初始化。但這是如何工作的?我似乎無法繞過C++ 17的摺疊表達式。這裏沒有足夠的例子。使用摺疊表達式填充數組時出現語法問題
這就是我想出了:
template<class T, std::size_t N>
struct foo
{
T arr[N];
template<typename... Args>
constexpr foo(Args&&... pack)
{
static_assert(sizeof...(pack) <= N, "Too many args");
std::size_t i = 0;
(arr[i++] = ...);
}
};
int main()
{
foo<int, 5> a(1, 2, 3, 4, 5);
}
編輯:與最新鏘編譯。摺疊表達式被支持。
活生生的例子:http://coliru.stacked-crooked.com/a/777dc32da6c54892
不應該至少是'(arr [i ++] = pack ...)'? –
@VaughnCato Expression包含未展開的參數包'pack' - 所以Clang抱怨。 – DeiDei
正如沃恩所說:「錯誤:包擴展不包含任何未展開的參數包」 – Deduplicator