Dei*_*Dei 14 c++ fold-expression c++17
是的,我可以使用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);
}
Run Code Online (Sandbox Code Playgroud)
编辑:与最新的Clang编译.支持折叠表达式.
T.C*_*.C. 13
您需要使用逗号运算符进行折叠,这也解决了排序问题.
(void(arr[i++] = pack) , ...);
Run Code Online (Sandbox Code Playgroud)
由于逗号运算符是左关联的,因此最好使用左一元折叠:
(...,void(arr[i++] = pack))
Run Code Online (Sandbox Code Playgroud)
强制转换为void是为了确保使用内置逗号运算符。在这种情况下,惯用手实际上并不重要。
| 归档时间: |
|
| 查看次数: |
959 次 |
| 最近记录: |